嘗試瀏覽映射到 Docker 容器的連接埠時收到“ERR_CONNECTION_REFUSED”

嘗試瀏覽映射到 Docker 容器的連接埠時收到“ERR_CONNECTION_REFUSED”

我已經拉取了一個 Docker 映像:

$ docker pull ghost

並從映像運行容器:

$ docker run --name test-ghost -p 8080:2368 -d ghost
7d984e974f6a75fe18b3d397b5c8f0a428928a2be9df83f0d61a679aa5f537fc

我的理解是,-p交換機會將主機上的連接埠(8080)對應到 Docker 內部的連接埠(2368),這樣我就可以從 Docker 外部(即從我的主機)存取 Docker 中執行的 Web 伺服器。

但是,當我嘗試從我的主機瀏覽 Chrome 中的以下任何地址時:

http://localhost:8080/
http://0.0.0.0:8080/
http://127.0.0.1:8080/

我收到以下錯誤:

This webpage is not available

ERR_CONNECTION_REFUSED

這看起來可能是連線問題,而不是容器內部的問題,因為當我檢查容器內正在執行的進程時,NodeJS 似乎正在執行:

$ docker top test-ghost
UID          PID           PPID      ...  CMD
docker       4290          1028      ...  npm
docker       4324          4290      ...  sh -c node index
docker       4325          4324      ...  node index

但 8080 連接埠上似乎沒有任何東西正在偵聽:

$ sudo lsof -n -i4TCP:8080 | grep LISTEN
$

我還檢查過,我的 MacOS 防火牆已關閉。


我不期望這裡有完整的解決方案,因為我知道我提供的資訊很少。

我想知道的是,如何解決這樣的問題?

看來Docker連接埠無法存取。

有什麼方法可以找出連接埠對映不起作用的原因嗎?或什麼連接埠被 Docker 暴露了?也許我映射了錯誤的內部連接埠?

或者對於我在這裡可能做錯的事情還有其他一般性建議嗎?

答案1

終於弄清楚如何進行這項工作了!

我在 MacOS 上運行 Docker 並使用“Docker QuickStart Terminal”。

事實證明,導航到“localhost”、“127.0.0.1”等是錯誤的,因為看起來 Docker 設定了自己的主機:

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

當我使用192.168.99.100上面給出的 時,一切正常。

答案2

要找出正在運行的容器的 IP 位址,您可以使用:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myContainerID

答案3

如果您docker-machine使用以下命令執行 docker 來取得 IP 位址(假設default是您的名字):

docker-machine ip default

看:https://docs.docker.com/machine/reference/ip/

答案4

開始使用 docker,這是我遇到的第一個問題/問題。

似乎 docker 可以讓您指定是否以不同模式使用端口,例如 - 主機、橋接(預設)

在橋接模式下,一旦部署 Ghost,docker 就會向您顯示一則訊息 - 您的部落格現在可以在http://本地主機:2368/但存取此網址顯示連線被拒絕。

要解決此問題,您需要存取 kitematic 中的實例設定(比使用控制台更容易)。轉到主機名稱/連接埠選項卡。如圖所示,建立從 docker 連接埠到主機連接埠和 bingo 的對應。現在再次造訪該網址,一切都按預期進行。

Kitematic 實例設定端口

相關內容