Docker无法连接到容器暴露的端口

时间:2019-03-01 08:51:14

标签: docker networking docker-compose containers

场景:

嘿,我正在运行一个由容器组成的docker。 在Windows 10的本地docker桌面上,此撰写文件的工作方式类似于魅力。 我使用网络driver bridge.配置了自己的网络 现在,我想在带有ubuntu vm的外部服务器上运行docker compose。 我有远程腻子连接到服务器。当我运行docker-compose up时,我的所有服务均成功启动。我还运行了portainer来对此进行gui控制。

问题: Lika我说过,我所有的服务都在运行。与本地设置的唯一区别是,我将portainer作为单个容器启动。我无法使用浏览器连接到portainer并检查整个设置。但是当我想调用我的暴露容器时,我无法获得连接并收到连接失败错误。 当我在Containers规范中查看portainer中的IP地址列时,我发现portainer具有与docker compose容器不同的ip。因此,portainer具有172.17.xxx,所有其他容器都以172.20.xxx开头。很明显,我专用网络中的暴露端口未暴露于主机桥网络。

我期望的结果 我希望我的虚拟机的IP像我的portainer实例一样可以使用暴露的端口。

想法 我是Docker的新手,所以我检查了docs并由于描述而认为:

  

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

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

问题: 当我从作曲中单独运行portainer时出现问题吗? 当我在外部服务器而不是本地主机上运行compose时,还有其他需要记住的地方吗?

组合网络cfg:

networks:
  my_net:
    driver: bridge

我的撰写版本是2.1

更新: Docker ps一切正常运行 docker在我想通过互联网访问的容器上进行检查:

"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
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

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

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

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

    • 连接超时:原因可能是服务器外部的防火墙(例如AWS中的SecurityGroups或类似的东西),或者可能是docker未管理服务器防火墙(这不是默认设置)

答案 1 :(得分:0)

我遇到了我指定的问题 运行 npm 启动 代替 CMD npm 启动

您的容器将启动,但永远不会暴露。这是为我做的