Py学习  »  docker

Docker无法连接到容器公开端口

medTech • 7 年前 • 2528 次点击  

脚本:

嘿,我在用集装箱做码头工人。 此合成文件在Windows 10上的MA Local Docker桌面上的工作方式类似于Charm。 我用网络配置了自己的网络 driver bridge. 现在我想用ubuntu vm在外部服务器上运行docker compose。 我有到服务器的远程putty连接。当我奔跑 docker-compose up 我的所有服务都成功启动。我还运行了portainer,在上面有一个gui控件。

问题: 就像我说的,我所有的服务都是跑步。与本地设置的唯一区别是,我将Portainer作为单个容器启动。我无法用浏览器连接到Portainer并检查整个设置。但是当我想调用我的公开容器时,我无法获得连接并获得连接失败错误。 当我查看容器规范中portainer的ip address列时,我发现portainer的ip与docker compose容器的ip不同。因此portainer有172.17.xxx,而所有其他容器都以172.20.xxx开头显然,我的专用网络中的公开端口没有公开到主机网桥网络。

我所期望的 我希望我的公开端口可以通过我的虚拟机的IP使用,就像我的Portainer实例一样。

思想 我对Docker很陌生所以我查了一下 docs 我想因为这个描述:

在用户定义的网桥网络中,不支持链接。你 可以在此网络中的容器上公开和发布容器端口。 如果您想成为网桥网络的一部分,这很有用 可用于外部网络。

…作为网络驱动程序的网桥将我的网络连接到本地主机Internet连接。

问题: 当我把Portainer从我的作文中分离出来的时候有什么问题吗? 当我在外部服务器上而不是在本地主机上运行compose时,是否需要记住其他一些东西?

Compsose网络配置:

networks:
  my_net:
    driver: bridge

我的作曲版本是2.1

更新: Docker PS说一切准备就绪 我想通过互联网访问的容器上的Docker InSect:

"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
                }
            }
        }
    }
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40496
文章 [ 1 ]  |  最新文章 7 年前
Mostafa Hussein
Reply   •   1 楼
Mostafa Hussein    7 年前

因此,可以将问题分解为以下步骤:

  1. 检查 docker inspect 或 docker ps 确保正确暴露端口的结果
  2. 尝试使用公用IP连接到它。例如,如果您收到错误消息

    • 连接被拒绝 :原因可能是容器中的应用程序未按预期运行。例如,您需要确保应用程序绑定到 0.0.0.0 而不是 127.0.0.1

    • 连接超时 :原因可能是服务器外部的防火墙,如AWS或类似的安全组,或者Docker没有管理服务器防火墙(这不是默认设置)