docker konteynerinden docker ana bilgisayarına bağlanma


10

Web sitemin tüm bölümlerini docker kaplarında çalıştıracağım bir kurulum var. 80 ve 443 numaralı bağlantı noktasını dinleyen nginx'im bir kapta çalışır.

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           

Başka bir kapsayıcıdaki bir hizmete proxy ayarlamak istiyorum. Bu kap, ana bilgisayardaki 3000 numaralı bağlantı noktasına bağlıdır:

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      

Docker ana bilgisayarındaki iptables'ım şöyle:

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         

Konteynerin içinden, iptables yapılandırması nedeniyle ana makinedeki 3000 numaralı bağlantı noktasına bağlanamıyorum.

3000 numaralı limanı halka açık internete açmak istemiyorum.

3000 numaralı kapta konteyner ile sunucu arasında doğrudan bir köprü açmanın bir yolu var mı?

Yoksa iptables'ımı docker ip aralığından kabul edecek şekilde değiştirmeli miyim?

Yanıtlar:


5

İhtiyacınız olan tek şey Docker'ın bağlantı yetenekleri [kullanımdan kaldırıldı]

Yapmaya çalıştığınız tüm karmaşık şeylerden kurtulun ve adlandırılmış kapları kullanmaya başlayın ve sonra bunları birbirine bağlayın.


Docker bağlantı yeteneklerine bir göz attım ama doğru anlarsam bazı sorunları var. 1. Çocuk yeniden başlatılırsa, yeni bir IP adresi alır. O zaman yeni çevre değişkenlerini almak için çocuğun tüm ebeveynlerinin yeniden başlatılması gerekir. 2. Bağlantı kurmak için bu ortam değişkenlerini okumak için uygulamama mantık eklemem gerekiyor.
user3133475

Yeniden başlatılan bir kapsayıcı ( docker restart your_container) IP adresini korumalıdır. Yalnızca belirli bir görüntüyü temel alan yeni bir kapsayıcı çalıştırırsanız, yeni bir IP ( docker run -d image command) alır.
Elias Probst

2
Bu eskiden doğruydu, ama en azından docker 1.0'dan itibaren "docker yeniden başlatma" kapsayıcıya yeni bir ip adresi veriyor. Sadece ip değişmeden önceki davranışına dayanan bazı komut dosyalarında vurmak.
jamshid

1
Bence bu muhtemelen OP'nin yapması gereken doğru şey olsa da, buraya geldiği gibi soruya bir cevap aramaya geldim. örn. ana bilgisayardaki bir hizmete bağlanma.
mc0e

2

Elias'ın cevabı doğru, ama bağlantı uzun ve kafa karıştırıcı. İşte basit bir özet:

İlk olarak, bağlantı oluşturmak için kapsayıcıyı çalıştırın ve adlandırın:

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

Sonra diğer kapsayıcıyı çalıştırın ve ilk kapsayıcıya bağlayın:

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

İlk konteynırdan ikinci konteynere olan bağlantı içine konulur /etc/hosts. Böylece bir ana bilgisayar adı gibi kullanabilirsiniz. Örneğin:

sudo docker run --name web --link db:db training/webapp ping db
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.