【发布时间】:2019-03-01 08:51:13
【问题描述】:
场景:
嘿,我正在运行一个带有容器的 docker compose。
这个 compose 文件在 Windows 10 上的本地 docker 桌面上的工作方式就像魅力一样。
我用网络driver bridge. 配置了我自己的网络
现在我想在带有 ubuntu vm 的外部服务器上运行 docker compose。
我与服务器有远程腻子连接。当我运行docker-compose up 时,我的所有服务都成功启动。我还运行了搬运工来对其进行 gui 控制。
问题: Lika 我说,我所有的服务都在运行。与本地设置的唯一区别是我将搬运工作为单个容器启动。我无法使用浏览器连接到搬运工并检查整个设置。但是当我想调用我的暴露容器时,我无法获得连接并获得连接失败错误。 当我查看容器规范中 portainer 中的 IP 地址列时,我发现 portainer 的 ip 与我的 docker compose 容器不同。所以 portainer 有 172.17.xxx 并且所有其他容器都以 172.20.xxx 开头显然我在我的私有网络中暴露的端口没有暴露给主机桥接网络。
我的期望 我希望通过我的虚拟机的 ip 可以使用我的公开端口,例如我的 portainer 实例。
想法 我对 docker 很陌生,所以我检查了docs,我认为是因为描述:
在用户定义的桥接网络中,不支持链接。你 可以在此网络中的容器上公开和发布容器端口。 如果您想制作桥接网络的一部分,这很有用 可用于外部网络。
..作为网络驱动程序的桥将我的网络连接到本地主机互联网连接。
问题: 当我将 portainer 与我的 compose 分开运行时有什么问题吗? 当我在外部服务器上而不是在我的本地主机上运行我的 compose 时,还有什么需要记住的吗?
组合网络配置文件:
networks:
my_net:
driver: bridge
而我的 compose 版本是 2.1
更新: Docker ps 表示一切正常运行 docker inpsect 在我想通过 Internet 访问的容器上:
"NetworkSettings": {
"Bridge": "",
"SandboxID": "9e1e335ab30f1f4d3f690e8902e06523fa095e7d8bshddkdksis7d66s7sjdjd",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"7778/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "7778"
}
]
},
"SandboxKey": "/var/run/docker/netns/9e1e386ttf56",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "",
"Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "",
"IPPrefixLen": 0,
"IPv6Gateway": "",
"MacAddress": "",
"Networks": {
"my_net": {
"IPAMConfig": null,
"Links": null,
"Aliases": [
"3cb72e02c43b",
"usermanagement-service"
],
"Gateway": "172.20.xx.x",
"IPAddress": "172.20.xx.xx",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"DriverOpts": null
}
}
}
}
【问题讨论】:
-
您要公开的容器的
docker ps或docker inspect结果是什么? -
更新了我的答案
-
你已经暴露了这个端口
7778,任何人都可以访问。当您尝试使用公共 ip 和端口连接到它时会发生什么? -
是的,我希望我可以连接到。但是我得到了描述的错误,即这个 ip 和端口没有答案。
-
我已经添加了带有解释的答案,以便以后可能对其他人有所帮助:D
标签: docker networking docker-compose containers