web-dev-qa-db-ja.com

DockerコンテナーからDockerホストへの接続

Webサイトのすべての部分をDockerコンテナーで実行する設定があります。ポート80および443でリッスンする私のnginxはコンテナーで実行されます。

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           

別のコンテナのサービスにプロキシを設定したい。このコンテナは、ホストのポート3000にバインドされています。

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 Hostのiptablesは次のようになります。

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         

コンテナー内から、iptables構成のため、ホストマシンのポート3000に接続できません。

パブリックインターネットにポート3000を開きたくありません。

ポート3000でコンテナーとホストの間に直接ブリッジを開く方法はありますか?

または、Docker IP範囲から受け入れるようにIPテーブルを変更する必要がありますか?

10
user3133475

必要なのはDockerの リンク機能 [非推奨]だけです

やろうとした複雑なことをすべて取り除き、名前付きコンテナを使い始めて、それらを互いにリンクします。

5
Elias Probst

エリアスの答えは正しいですが、リンクは長くて混乱しています。ここに簡単な要約があります:

まず、リンクするコンテナを実行して名前を付けます。

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

次に、他のコンテナを実行して、最初のコンテナにリンクします。

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

最初のコンテナーから2番目のコンテナーへのリンクは/etc/hostsに入れられます。したがって、ホスト名のように使用できます。例えば:

Sudo docker run --name web --link db:db training/webapp ping db
2
Ron Romero