簡體   English   中英

Docker 無法連接到容器暴露端口

[英]Docker can't connect to Container exposed port

設想:

嘿,我正在運行一個 docker 組合容器。 這個撰寫文件在 windows 10 上的 ma 本地 docker 桌面上像魅力一樣工作 10. 我配置了我自己的.network 和.network driver bridge. 現在,我想在具有 ubuntu 虛擬機的外部服務器上運行 docker compose。 我有到服務器的遠程膩子連接。 當我運行docker-compose up時,我的所有服務都成功啟動。 我還讓 portainer 運行以對其進行 gui 控制。

問題:我說過,我所有的服務都在運行。 與本地設置的唯一區別是我將 portainer 作為單個容器啟動。 我無法使用瀏覽器連接到 portainer 並檢查整個設置。 但是當我想調用我的公開容器時,我無法連接並得到連接失敗的錯誤。 當我查看容器規范中 portainer 中的 IP 地址列時,我發現 portainer 的 ip 與我的 docker compose 容器不同。 所以 portainer 有 172.17.xxx,所有其他容器都以 172.20.xxx 開頭,顯然我在 private.network 中暴露的端口沒有暴露給主機 bridge.network。

我希望我的虛擬機(如 portainer 實例)的 ip 可以使用我公開的端口。

想法我對 docker 很陌生所以我檢查了文檔並且我認為是因為描述:

在用戶定義的 bridge.network 中,不支持鏈接。 您可以在 this.network 中公開和發布容器上的容器端口。 如果你想讓 bridge.network 的一部分對 outside.network 可用,這很有用。

..作為 .network 驅動程序的那個橋會將 my.network 連接到本地主機 inte.net 連接。

問題:當我將 portainer 與我的 compose 分開運行時有什么問題嗎? 當我在外部服務器上而不是在我的本地主機上運行我的 compose 時,還有什么要記住的嗎?

compsose.network 配置文件:

networks:
  my_net:
    driver: bridge

我的撰寫版本是 2.1

更新: Docker ps 表示在我想通過 Inte.net 到達的容器上全部啟動並運行 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
                }
            }
        }
    }

所以問題可以分解為以下幾個步驟:

  1. 檢查docker inspectdocker ps結果以確保您的端口正確暴露
  2. 嘗試使用公共 IP 連接到它。 例如,如果您收到錯誤消息

    • Connection Refused :原因可能是容器內的應用程序未按預期運行。 例如,您需要確保應用程序綁定到0.0.0.0而不是127.0.0.1

    • 連接超時:原因可能是服務器外部的防火牆,例如 AWS 中的 SecurityGroups 或類似的,或者 docker 沒有管理服務器防火牆(這不是默認設置)

就我而言,這是無效的參數順序:

docker run myrazorapp -p 8080:80

什么時候應該:

docker run -p 8080:80 myrazorapp 

端口參數被簡單地忽略了。

就在最近,我們在容器到容器連接方面遇到了類似的問題,問題是默認配置錯誤 ubuntu firewall ufw

所以在我們的案例中解決方案是:

 sudo ufw disable

我遇到了我指定 RUN npm start 而不是 CMD npm start 的問題

您的容器將啟動,但它永遠不會暴露。 這是為我做的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM