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

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 ホスト上の 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 範囲から受け入れるように iptables を変更する必要がありますか?

答え1

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

これまでやろうとしていた複雑な作業をすべて取り除き、名前付きコンテナーを使用して、それらを相互にリンクするだけです。

答え2

エリアスの答えは正しいですが、リンクが長くてわかりにくいです。簡単にまとめると次のようになります。

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

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

関連情報