以docker-compose开头的容器在另一个容器内无法访问

时间:2018-12-17 02:18:16

标签: docker docker-compose

我正在使用一个专用容器来运行与项目相关的通用外壳脚本,从而避免了必须在多个环境(mac,win,ubuntu,debian ...)上测试脚本,并最大限度地减少了主机操作系统上的软件需求。甚至docker-compose命令都从控制台容器运行。 /var/run/docker.sock是从主机绑定挂载的。

其他一切似乎都正常,但是例如,如果我在控制台容器中运行docker-compose up traefik ,traefik可以正常启动,但是无论是在主机上还是在其他容器中都无法访问同一网络。如果从主机操作系统(Windows 10)运行docker-compose up traefik,则可以按预期达到traefik。我怀疑这与Docker或docker-compose处理网络的方式有关,但我不确定。我确实检查过,无论我如何启动traefik容器,相同的端口都会立即显示在NirSoft CurrPorts(netstat的gui)中。

有什么办法(以及如何)解决此问题?

编辑 我意识到这一定程度上是我的一个错误,因为存在dockerized docker guis,并且它们在启动可从主机和外部世界访问的容器方面似乎没有任何问题。

现在我想知道这是否可能是我的docker(-compose)设置中或主机上其他地方的简单配置错误,还是像Portainer这样的guis进行了一些额外的步骤来暴露已启动的容器给主机?

1 个答案:

答案 0 :(得分:0)

出于开发目的,我们都将Traefik的端口映射到80,因此在您的情况下,我也将假定相同。假设您正在端口80中运行Traefik容器,该端口已映射到主机中的端口80。但是根据您的Traefik容器,主机只不过是用于运行脚本的容器。但是,shell脚本容器的端口80没有映射到该特定容器的主机。我希望现在您已经迷失在端口映射和容器周围的某个地方。

让我在下图中描述您的情况。enter image description here

要使设置正常工作,您应该如上所示部署容器以及端口映射。 为了简化答案,

docker run -t -d -p 80:80 shellScriptImage
docker run -t -d -p 80:80 traefik (- inside the shell script container)

这样做,您可以从外部访问traefik容器。