Docker can';t连接到容器暴露端口

Docker can';t连接到容器暴露端口,docker,networking,docker-compose,containers,Docker,Networking,Docker Compose,Containers,场景: networks: my_net: driver: bridge 嘿,我在用集装箱做码头工。 这个合成文件在Windows10上的ma本地docker桌面上工作得很好。 我用网络驱动桥配置了自己的网络。 现在我想在带有ubuntu虚拟机的外部服务器上运行docker compose。 我与服务器有远程putty连接。当我运行docker compose up时,我的所有服务都成功启动。我还运行了portainer,在上面有一个gui控件 问题: 就像我说的,我所有的服务都在

场景:

networks:
  my_net:
    driver: bridge
嘿,我在用集装箱做码头工。 这个合成文件在Windows10上的ma本地docker桌面上工作得很好。 我用网络
驱动桥配置了自己的网络。
现在我想在带有ubuntu虚拟机的外部服务器上运行docker compose。 我与服务器有远程putty连接。当我运行
docker compose up
时,我的所有服务都成功启动。我还运行了portainer,在上面有一个gui控件

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

我的期望 我想让我的暴露端口通过虚拟机的ip可用,就像我的portainer实例一样

思想 我是docker的新手,所以我检查了一下,我想是因为描述:

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

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

问题: 当我将portainer与我的作文分开运行时,是否有什么问题? 在网络方面,当我在外部服务器上而不是本地主机上运行compose时,还有什么需要记住的吗

公司网络cfg:

networks:
  my_net:
    driver: bridge
我的写作版本是2.1

更新: Docker ps表示一切正常 docker InSect位于我希望通过Internet访问的容器上:

"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 inspect
    docker ps
    结果,确保正确暴露端口
  • 尝试使用公共IP连接到它。例如,如果您收到错误消息

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

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


  • 我有我指定的问题 运行npm启动 而不是 CMD npm启动


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

    你要公开的容器的
    docker ps
    docker inspect
    结果是什么?更新了我的回答你公开了这个端口
    7778
    ,任何人都可以访问。当您尝试使用公共ip和端口连接到它时会发生什么情况?是的,我希望我可以连接到。但我得到了描述的错误,即此ip和端口没有答案。我添加了答案并进行了解释,以便以后对其他人有所帮助:对于未来的读者,在我的例子中,
    openvpn
    的一个进程导致我超时。不知何故,我没有意识到这一点:
    您需要确保应用程序绑定到0.0.0.0,而不是127.0.0.1
    。那是我的问题。应用程序(ApacheTika服务器)的默认端口是localhost,因此我必须使用
    --host=0.0.0.0
    在docker中修复它。汉克斯@fbicknel在我的例子中,我试图将应用程序绑定到与服务同名的主机上(Docker文档中描述了这一点),事实上,只有当我将应用程序绑定到
    0.0.0
    时,它才对我起作用。我的问题是:如果文档本身告诉我们使用服务名作为主机,为什么它不工作?可能有什么配置错误吗?@RodrigoChaves,你能再解释一下openvpn问题吗?你们是怎么解决的?谢谢大家,
    --host=0.0.0.0
    也是我的问题!