GNU/Linux >> Belajar Linux >  >> Linux

Meneruskan port host ke wadah buruh pelabuhan

Sebagaimana dinyatakan dalam salah satu komentar, ini berfungsi untuk Mac (mungkin juga untuk Windows/Linux):

SAYA INGIN MENGHUBUNGKAN DARI CONTAINER KE LAYANAN DI HOST

Tuan rumah memiliki alamat IP yang berubah (atau tidak ada jika Anda tidak memiliki akses jaringan). Kami menyarankan Anda menghubungkan ke nama DNS khusus host.docker.internal yang menyelesaikan ke alamat IP internal yang digunakan oleh tuan rumah. Ini untuk tujuan pengembangan dan tidak akan berfungsi di lingkungan produksi di luar Docker Desktop untuk Mac.

Anda juga dapat menjangkau gateway menggunakan gateway.docker.internal .

Dikutip dari https://docs.docker.com/docker-for-mac/networking/

Ini bekerja untuk saya tanpa menggunakan --net=host .


Cara sederhana namun relatif tidak aman adalah dengan menggunakan --net=host opsi untuk docker run .

Opsi ini membuat kontainer menggunakan tumpukan jaringan host. Kemudian Anda dapat terhubung ke layanan yang berjalan di host hanya dengan menggunakan "localhost" sebagai nama host.

Ini lebih mudah untuk dikonfigurasi karena Anda tidak perlu mengonfigurasi layanan untuk menerima koneksi dari alamat IP penampung buruh pelabuhan Anda, dan Anda tidak perlu memberi tahu penampung buruh pelabuhan alamat IP atau nama host tertentu untuk terhubung, cukup sebuah pelabuhan.

Misalnya, Anda dapat mengujinya dengan menjalankan perintah berikut, yang menganggap gambar Anda disebut my_image , gambar Anda menyertakan telnet utilitas, dan layanan yang ingin Anda sambungkan ada di port 25:

docker run --rm -i -t --net=host my_image telnet localhost 25

Jika Anda mempertimbangkan untuk melakukannya dengan cara ini, harap lihat peringatan tentang keamanan di halaman ini:

https://docs.docker.com/articles/networking/

Dikatakan:

--net=host -- Memberi tahu Docker untuk melewati penempatan wadah di dalam tumpukan jaringan terpisah. Intinya, pilihan ini memberi tahu Docker untuk tidak memasukkan jaringan container ke dalam container! Sementara proses kontainer masih akan terbatas pada sistem file mereka sendiri dan daftar proses dan batas sumber daya, perintah ip addr cepat akan menunjukkan kepada Anda bahwa, berdasarkan jaringan, mereka tinggal "di luar" di host Docker utama dan memiliki akses penuh ke antarmuka jaringannya . Perhatikan bahwa ini tidak membiarkan wadah mengonfigurasi ulang tumpukan jaringan host — yang akan membutuhkan --privileged=true — tetapi membiarkan proses wadah membuka port bernomor rendah seperti proses root lainnya. Ini juga memungkinkan wadah untuk mengakses layanan jaringan lokal seperti D-bus. Hal ini dapat menyebabkan proses dalam wadah dapat melakukan hal yang tidak terduga seperti memulai ulang komputer Anda. Anda harus menggunakan opsi ini dengan hati-hati.


Host buruh pelabuhan Anda memaparkan adaptor ke semua wadah. Dengan asumsi Anda menggunakan ubuntu terbaru, Anda dapat menjalankan

ip addr

Ini akan memberi Anda daftar adapter jaringan, salah satunya akan terlihat seperti

3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
   valid_lft forever preferred_lft forever

Anda harus memberi tahu kelinci/mongo untuk mengikat ke IP itu (172.17.42.1). Setelah itu, Anda akan dapat membuka koneksi ke 172.17.42.1 dari dalam container Anda.


Linux
  1. Cara Mengakses Namespace Jaringan Docker Container dari Host

  2. Menjelajahi sistem file kontainer Docker

  3. Apa yang ada di dalam gambar/wadah Docker?

  1. Docker di Docker tidak dapat memasang volume

  2. Apa PID di host, dari proses yang berjalan di dalam container Docker?

  3. Memahami pemetaan port buruh pelabuhan

  1. Cara Memasang Direktori Host Ke Wadah Docker

  2. Cara Keluar dari Kontainer Docker

  3. Membuat pemasangan NFS pada host terlihat dan baca-tulis di dalam wadah Docker