场景:
嗨,我正在使用docker compose运行容器。
这个compose文件在我的本地windows 10 docker桌面上完美运行。 我使用driver bridge
配置了自己的网络。
现在我想在带有ubuntu虚拟机的外部服务器上运行docker compose。
我远程连接到服务器的putty。当我运行docker-compose up
时,所有服务都成功启动了。 我还运行了portainer以进行GUI控制。
问题: 就像我说的,我所有的服务都在运行。与我的本地设置唯一不同的是,我将portainer作为单独的容器启动。我可以用浏览器连接到portainer并检查整个设置。但是,当我想调用我的暴露容器时,我无法建立连接并出现连接失败错误。当我查看portainer中容器规格中的IP地址列时,我发现portainer的IP与我的docker-compose容器不同。因此,portainer具有172.17.xxx,而所有其他容器都以172.20.xxx启动。显然,我的私有网络中的暴露端口未暴露给主机桥接网络。
期望结果: 我希望我的暴露端口能够通过我的虚拟机的IP像我的portainer实例一样可用。
想法: 我对docker还不太熟悉,因此我查看了文档,我认为由于描述:
在用户定义的桥接网络中,不支持链接。您可以在此网络中的容器上公开和发布容器端口。 如果您要将桥接网络的一部分提供给外部网络,则此功能非常有用。
..作为网络驱动程序的bridge会将我的网络连接到本地主机Internet连接。
问题: 当我从我的compose中单独运行portainer时,是否存在问题? 在外部服务器上运行我的compose而不是在localhost上运行时,是否还有其他事项需要注意?
compose network cfg:
networks:
my_net:
driver: bridge
我的版本是2.1
更新: Docker ps显示所有容器都在运行。 我想通过互联网访问的容器的docker inspect:
"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
结果是什么? - Mostafa Hussein7778
,任何人都可以访问。当你尝试使用公共IP和端口连接时会发生什么? - Mostafa Hussein