社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

medTech • 7 年前 • 2490 次点击  

脚本:

嘿,我在用集装箱做码头工人。 此合成文件在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没有管理服务器防火墙(这不是默认设置)