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.