从 docker 容器连接到 docker 主机

从 docker 容器连接到 docker 主机

我有一个设置,将网站的所有部分都运行在 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 上打开容器和主机之间的直接桥接?

或者我应该修改我的 iptables 来接受来自 docker ip 范围的请求?

答案1

你所需要的只是 Docker 的链接能力[已弃用]

只需摆脱您尝试做的所有复杂的事情,开始使用命名容器,然后将它们相互链接。

答案2

Elias 的回答是正确的,但是链接很长而且令人困惑。下面是一个简单的总结:

首先,运行要链接的容器,并命名它:

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

然后运行另一个容器,将其链接到第一个容器:

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

从第一个容器到第二个容器的链接被放入/etc/hosts。因此你可以像主机名一样使用它。例如:

sudo docker run --name web --link db:db training/webapp ping db

相关内容