Apakah mungkin untuk memiliki port akses wadah Docker dibuka oleh tuan rumah? Secara konkret saya memiliki MongoDB dan RabbitMQ berjalan di host dan saya ingin menjalankan proses dalam wadah Docker untuk mendengarkan antrian dan (opsional) menulis ke database.
Saya tahu saya dapat meneruskan port dari container ke host (melalui opsi -p) dan memiliki koneksi ke dunia luar (yaitu internet) dari dalam container Docker tetapi saya tidak ingin mengekspos port RabbitMQ dan MongoDB dari tuan rumah ke dunia luar.
EDIT: beberapa klarifikasi:
Starting Nmap 5.21 ( http://nmap.org ) at 2013-07-22 22:39 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00027s latency).
PORT STATE SERVICE
6311/tcp open unknown
joelkuiper@vps20528 ~ % docker run -i -t base /bin/bash
root@f043b4b235a7:/# apt-get install nmap
root@f043b4b235a7:/# nmap 172.16.42.1 -p 6311 # IP found via docker inspect -> gateway
Starting Nmap 6.00 ( http://nmap.org ) at 2013-07-22 20:43 UTC
Nmap scan report for 172.16.42.1
Host is up (0.000060s latency).
PORT STATE SERVICE
6311/tcp filtered unknown
MAC Address: E2:69:9C:11:42:65 (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 13.31 seconds
Saya harus melakukan trik ini untuk mendapatkan koneksi internet dengan wadah: Firewall saya memblokir koneksi jaringan dari wadah buruh pelabuhan ke luar
EDIT : Akhirnya saya pergi dengan membuat jembatan kustom menggunakan pipa dan meminta layanan mendengarkan pada jembatan IP. Saya menggunakan pendekatan ini daripada meminta MongoDB dan RabbitMQ mendengarkan pada docker bridge karena memberikan lebih banyak fleksibilitas.
sumber
lo
daneth0
.Cara sederhana namun relatif tidak aman adalah dengan menggunakan
--net=host
opsi untukdocker run
.Opsi ini membuatnya agar wadah 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 dikonfigurasikan karena Anda tidak perlu mengonfigurasi layanan untuk menerima koneksi dari alamat IP wadah buruh pelabuhan Anda, dan Anda tidak perlu memberi tahu pekerja pelabuhan tentang alamat IP tertentu atau nama host yang akan disambungkan, cukup sebuah port.
Misalnya, Anda dapat mengujinya dengan menjalankan perintah berikut, yang menganggap gambar Anda dipanggil
my_image
, gambar Anda menyertakantelnet
utilitas, dan layanan yang ingin Anda sambungkan ada di port 25:Jika Anda mempertimbangkan untuk melakukannya dengan cara ini, silakan lihat peringatan tentang keamanan di halaman ini:
https://docs.docker.com/articles/networking/
Ia mengatakan:
sumber
--net=host
tidak berfungsi untuk memungkinkan proses wadah Anda terhubung ke mesin host Anda menggunakanlocalhost
. Sebaliknya, memiliki wadah Anda terhubung ke MacOS khusus hanya hostnamedocker.for.mac.host.internal
bukanlocalhost
. Tidak ada parameter tambahan yang diperlukan agardocker run
ini berfungsi. Anda dapat meneruskan ini sebagai env var menggunakan-e
jika Anda ingin menjaga platform wadah Anda agnostik. Dengan begitu Anda dapat terhubung ke host yang bernama env var dan meneruskandocker.for.mac.host.internal
di MacOS danlocalhost
di Linux.host.docker.internal
, lihat docdocker run --rm -it --net=host postgres bash
kemudianpsql -h host.docker.internal -U postgres
Anda juga bisa membuat terowongan ssh.
docker-compose.yml
:docker/Dockerfile.tunnel
:config/ssh/config
:Dengan cara
elasticsearch
ini terowongan ke server dengan layanan yang berjalan (Elasticsearch, MongoDB, PostgreSQL) dan memperlihatkan port 9200 dengan layanan itu.sumber
Saya memiliki masalah yang sama mengakses LDAP-Server dari wadah buruh pelabuhan. Saya menetapkan IP tetap untuk wadah dan menambahkan aturan firewall.
docker-compose.yml:
aturan iptables:
iptables -A INPUT -j ACCEPT -p tcp -s 192.168.50.2 -d $192.168.50.1 --dport portnumberOnHost
Di dalam akses kontainer
dockerhost:portnumberOnHost
sumber
Jika MongoDB dan RabbitMQ berjalan di Host, maka port seharusnya sudah terbuka karena tidak ada dalam Docker.
Anda tidak perlu
-p
opsi untuk mengekspos port dari wadah ke host. Secara default, semua port terbuka. The-p
pilihan memungkinkan Anda untuk mengekspos port dari wadah ke luar dari tuan rumah.Jadi, tebakan saya adalah bahwa Anda tidak perlu
-p
sama sekali dan itu harus bekerja dengan baik :)sumber