GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Bagaimana Menghubungkan ke Localhost Dalam Wadah Docker

Saat bekerja dengan Docker, Anda biasanya menyimpan layanan yang membentuk tumpukan Anda dan menggunakan jaringan antar-kontainer untuk berkomunikasi di antara mereka. Terkadang Anda mungkin memerlukan wadah untuk berbicara dengan layanan di host Anda yang belum dalam wadah. Berikut cara mengakses localhost atau 127.0.0.1 dari dalam wadah Docker.

Opsi Mudah

Docker Desktop 18.03+ untuk Windows dan Mac mendukung host.docker.internal sebagai alias yang berfungsi untuk localhost . Gunakan string ini di dalam container Anda untuk mengakses mesin host Anda.

  • localhost dan 127.0.0.1 – Ini diselesaikan ke wadah .
  • host.docker.internal – Ini diselesaikan ke host luar.

Jika Anda menjalankan server MySQL di host Anda, container Docker dapat mengaksesnya dengan menghubungkan ke host.docker.internal:3306 . Ini adalah teknik paling sederhana saat Anda bekerja di mesin Windows atau Mac.

Pengguna Docker Engine di Linux dapat mengaktifkan host.docker.internal juga melalui --add-host tandai docker run . Mulai container Anda dengan flag ini untuk mengekspos string host:

docker run -d --add-host host.docker.internal:host-gateway my-container:latest

--add-host flag menambahkan entri ke /etc/hosts penampung mengajukan. Nilai yang ditampilkan di atas memetakan host.docker.internal ke gateway host penampung, yang cocok dengan localhost yang sebenarnya nilai. Anda dapat mengganti host.docker.internal dengan string Anda sendiri jika Anda mau.

Menghubungkan ke Jaringan Host

Docker menyediakan host jaringan yang memungkinkan wadah berbagi tumpukan jaringan host Anda. Pendekatan ini berarti localhost di dalam wadah diselesaikan ke host fisik, bukan wadah itu sendiri.

Kontainer diluncurkan dengan jaringan host dengan menambahkan --network=host bendera:

docker run -d --network=host my-container:latest

Sekarang wadah Anda dapat mereferensikan localhost atau 127.0.0.1 secara langsung.

Jika Anda menggunakan Docker Compose, ubah definisi layanan penampung Anda untuk menyertakan network_mode bidang:

services:
  my-service:
    network_mode: host

Ada beberapa peringatan untuk pendekatan ini. Penting untuk mempertimbangkan semua implikasinya sebelum Anda menggunakannya. Kontainer biasanya mendapatkan jaringan pribadi mereka sendiri yang terpisah dari tumpukan host. Saat Anda menentukan --network=host , penampung secara default mewarisi setelan jaringan bersama dari host Anda.

Setiap port yang diekspos oleh container akan diekspos di host , meskipun tidak dideklarasikan secara eksplisit dengan -p bendera. Hostname default container akan cocok dengan host, meskipun ini dapat diubah dengan --hostname bendera.

Jaringan host dapat menjadi masalah keamanan yang merusak model isolasi wadah Docker. Ini masih dapat berguna dalam skenario di mana Anda yakin bahwa menjalankan container tidak akan saling bertentangan atau menyebabkan masalah di lingkungan host Anda. Mode jaringan host juga lebih cepat daripada mode jembatan default karena tidak ada lapisan virtualisasi untuk dilewati lalu lintas.

Mengakses Host Dengan Mode Jembatan Default

Host Anda masih dapat diakses dari wadah di bridge default modus jaringan. Anda hanya perlu mereferensikannya dengan IP jaringan Docker-nya, bukan localhost atau 127.0.0.1 .

Sebagian besar instalasi Docker Engine akan mewakili host sebagai 172.17.0.1 pada docker0 default jaringan jembatan. Anda dapat memeriksa IP Anda sendiri dengan menjalankan perintah ini di host Anda:

ip addr show docker0

IP Docker host Anda akan ditampilkan di inet garis. Hubungkan ke alamat IP ini dari dalam wadah Anda untuk berhasil mengakses layanan yang berjalan di host Anda.

Salah satu perangkap dari pendekatan ini adalah Anda mungkin tidak dapat terhubung ke layanan yang mengikat langsung ke localhost . Anda harus memastikan layanan Anda mendengarkan koneksi pada IP jembatan Docker Anda, serta localhost dan 127.0.0.1 . Jika tidak, Anda akan melihat connection refused atau kesalahan serupa dalam penampung Anda.

Ringkasan

Anda memiliki beberapa opsi saat Anda perlu menjangkau di luar wadah Docker ke localhost mesin Anda . Jika Anda menggunakan Windows atau Mac, sebaiknya gunakan host.docker.internal bawaan alias. Pengguna Linux dapat mengatur sesuatu yang mirip dengan --add-host tandai saat memulai penampung.

Mode jaringan host adalah alternatif universal yang memungkinkan container berbagi tumpukan jaringan host Anda. Anda dapat mereferensikan localhost langsung tetapi perlu tetap waspada terhadap risiko dan batasannya. Ini bukan pilihan yang cocok ketika isolasi jaringan yang kuat diperlukan.

Tetap menggunakan mode bridge bisa menjadi pilihan terbaik untuk beban kerja yang mendukungnya. Ikat layanan host Anda ke IP Docker-nya, lalu gunakan alamat itu untuk terhubung dari dalam wadah Anda. Ini memungkinkan Anda menggunakan jaringan virtual per-kontainer Docker sambil memberikan rute ke host Anda saat diperlukan.


Docker
  1. Cara Memasang Direktori Host Ke Wadah Docker

  2. Cara Menetapkan IP Statis ke Wadah Docker

  3. Cara Mendaftar Kontainer Docker

  1. Cara menginstal WordPress menggunakan Docker

  2. Bagaimana Menghubungkan Kontainer Docker

  3. Cara Menjalankan MySQL Dalam Wadah Docker

  1. Cara SSH Ke Wadah Docker

  2. Cara Menginstal Vim di Wadah Docker

  3. Cara Keluar dari Kontainer Docker