med*_*ech 11 networking containers docker docker-compose
设想:
嘿,我正在运行一个带有容器的 docker compose。这个 compose 文件在 Windows 10 上的 ma 本地 docker 桌面上就像魅力一样。我用网络配置了我自己的网络driver bridge.
现在我想在带有 ubuntu vm 的外部服务器上运行 docker compose。我有到服务器的远程腻子连接。当我运行docker-compose up
我所有的服务成功启动。我还运行了 portainer 以对此进行 gui 控制。
问题: Lika 我说过,我所有的服务都在运行。与我的本地设置的唯一区别是我将 portainer 作为单个容器启动。我无法使用浏览器连接到 portainer 并检查整个设置。但是当我想调用我的公开容器时,我无法获得连接并出现连接失败错误。当我查看容器规范中 portainer 中的 IP 地址列时,我发现 portainer 的 IP 与我的 docker compose 容器不同。所以 portainer 有 172.17.xxx 并且所有其他容器都以 172.20.xxx 开头,显然我的专用网络中暴露的端口没有暴露给主机桥接网络。
我希望 我的公开端口可以通过我的虚拟机的 ip 使用,例如我的 portainer 实例。
想法 我对 docker 很陌生,所以我检查了文档,我认为是因为描述:
在用户定义的桥接网络中,不支持链接。您可以在此网络中的容器上公开和发布容器端口。如果您想让桥接网络的一部分可供外部网络使用,这将非常有用。
..作为网络驱动程序的网桥将我的网络连接到本地主机互联网连接。
问题: 当我从我的 compose 中运行 portainer 时有什么问题吗?当我在外部服务器上而不是在我的本地主机上运行我的撰写时,还有什么需要记住的吗?
撰写网络配置文件:
networks:
my_net:
driver: bridge
Run Code Online (Sandbox Code Playgroud)
我的撰写版本是 2.1
更新: Docker ps 表示在我想通过 Internet 访问的容器上启动并运行 docker inpsect:
"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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mos*_*ein 32
所以问题可以分解为以下几个步骤:
docker inspect
或docker ps
结果以确保您的端口正确公开尝试使用公共 IP 连接到它。例如,如果您收到错误消息
连接被拒绝:原因可能是容器内的应用程序未按预期运行。例如,您需要确保应用程序绑定到0.0.0.0
而不是127.0.0.1
连接超时:原因可能是服务器外部的防火墙,如 AWS 中的 SecurityGroups 或类似的,或者 docker 没有管理服务器防火墙(这不是默认设置)
Mr *_*nce 21
就我而言,参数顺序无效:
docker run myrazorapp -p 8080:80
Run Code Online (Sandbox Code Playgroud)
当它应该是:
docker run -p 8080:80 myrazorapp
Run Code Online (Sandbox Code Playgroud)
端口参数被简单地忽略。
就在最近,我们在容器到容器的连接方面遇到了类似的问题,问题是默认的 ubuntu 防火墙配置错误ufw
所以在我们的案例中,解决方案是:
sudo ufw disable
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28210 次 |
最近记录: |