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テーブルを変更する必要がありますか?
必要なのはDockerの リンク機能 [非推奨]だけです
やろうとした複雑なことをすべて取り除き、名前付きコンテナを使い始めて、それらを互いにリンクします。
エリアスの答えは正しいですが、リンクは長くて混乱しています。ここに簡単な要約があります:
まず、リンクするコンテナを実行して名前を付けます。
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