menghubungkan dari wadah buruh pelabuhan ke host buruh pelabuhan


10

Saya memiliki pengaturan tempat saya menjalankan semua bagian situs web saya dalam wadah buruh pelabuhan. Nginx saya yang mendengarkan pada port 80 dan 443 dijalankan dalam sebuah wadah.

363292a98545        scivm/nginx-django-scivmcom:latest   /usr/bin/supervisord   12 days ago         Ghost               0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp     lonely_feynmann           

Saya ingin mengatur proxy ke layanan di wadah lain. Kontainer ini terikat ke port 3000 pada host:

b38c8ef72d0a        mazzolino/strider-dind:latest        wrapdocker /usr/bin/   41 minutes ago      Up 41 minutes       0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp                                       distracted_einstein      

Iptables saya pada host buruh pelabuhan terlihat seperti ini:

root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Dari dalam wadah, saya tidak dapat terhubung ke port 3000 pada mesin host karena konfigurasi iptables.

Saya tidak ingin membuka port 3000 ke internet publik.

Apakah ada cara untuk membuka jembatan langsung antara kontainer dan host pada port 3000?

Atau haruskah saya memodifikasi iptables saya untuk menerima dari kisaran ip buruh pelabuhan?

Jawaban:


5

Yang Anda butuhkan adalah kemampuan tautan Docker [usang]

Cukup singkirkan semua hal rumit yang Anda coba lakukan dan mulai menggunakan wadah bernama dan kemudian tautkan satu sama lain.


Saya melihat kemampuan link docker tetapi jika saya mengerti benar itu memiliki beberapa masalah. 1. Jika anak restart, itu akan mendapatkan alamat ip baru. Maka semua orang tua dari anak itu perlu direstart juga untuk mendapatkan varilabes lingkungan baru. 2. Saya harus menambahkan logika ke aplikasi saya untuk membaca variabel lingkungan tersebut untuk membuat koneksi.
user3133475

Wadah yang dimulai kembali ( docker restart your_container) harus menyimpan alamat IP itu. Hanya jika Anda menjalankan wadah baru berdasarkan gambar yang diberikan, itu akan mendapatkan IP baru ( docker run -d image command).
Elias Probst

2
Itu dulu benar, tetapi setidaknya pada docker 1.0 "docker restart" memberikan wadah alamat ip baru. Tekan saja ini di beberapa skrip yang mengandalkan perilaku ip sebelumnya tidak berubah.
jamshid

1
Sementara saya pikir ini mungkin hal yang tepat untuk OP lakukan, saya datang ke sini mencari jawaban atas pertanyaan yang diajukan. yaitu cara menautkan ke layanan di host.
mc0e

2

Jawaban Elias benar, tetapi tautannya panjang dan membingungkan. Berikut ringkasan sederhana:

Pertama, jalankan wadah yang akan ditautkan, dan beri nama:

sudo docker run -d --name db training/postgres

Kemudian jalankan wadah lain, tautkan ke wadah pertama:

sudo docker run -d -P --name web --link db:db training/webapp python app.py

Tautan dari wadah pertama ke wadah kedua dimasukkan /etc/hosts. Jadi Anda bisa menggunakannya seperti nama host. Sebagai contoh:

sudo docker run --name web --link db:db training/webapp ping db
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.