Port

如何在 docker 容器中公開埠

  • July 24, 2018

我已經在自定義埠(8080)上的 docker 容器中執行了 Web 服務。在這裡,我正在嘗試執行一個容器,暴露相關容器的埠(如此處所示),但無濟於事。

docker run -p 127.0.0.1:8080:8080 beatthemarket run wait

但我似乎無法到達那個 Web 服務端點。

***i)***我是否正確地暴露了容器的埠?***ii)***如果埠不可用,或者我的 Web 服務沒有被呼叫(如果能夠進入容器並捲曲端點,那就太好了)。

我的 Dockerfile 可以在這裡看到。我正在使用 Adzerk 的boot-clj基礎映像。

實際執行docker,每次取回一堆jar。然後啟動塊(wait任務),這就是我想要的(網路伺服器將處理網路請求)。這就是我迷路的地方。在 docker 中啟動,按照我的要求進行阻止。但我似乎無法獲得根 URI應返回的基本Hello World消息。

$ docker run -p 127.0.0.1:8080:8080 beatthemarket run wait
Downloading https://github.com/boot-clj/boot/releases/download/2.5.5/boot.jar...
Retrieving dynapath-0.2.3.jar from https://clojars.org/repo/
Retrieving pod-2.5.5.jar from https://clojars.org/repo/
Retrieving shimdandy-impl-1.2.0.jar from https://repo1.maven.org/maven2/
Retrieving core-2.5.5.jar from https://clojars.org/repo/
...
Implicit target dir is deprecated, please use the target task instead.
Set BOOT_EMIT_TARGET=no to disable implicit target dir.

Chrome,curl 和 wget 都說連接被拒絕。

$ curl http://127.0.0.1:8080/
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused

$ wget http://127.0.0.1:8080/
--2016-04-21 20:07:32--  http://127.0.0.1:8080/
Connecting to 127.0.0.1:8080... failed: Connection refused. 

您需要將該EXPOSE語句添加到 Dockerfile 中以獲取埠 8080。

這是來自 Docker 的參考:https ://docs.docker.com/engine/reference/builder/#expose

您的最終 Dockerfile 應該如下所示:

FROM adzerk/boot-clj

EXPOSE 8080

WORKDIR /app
COPY . /app

-p 開關會在你的主機上打一個洞,橋接到你的 docker 實例,-p host_port:docker_instance_port

現在你必須找出你的 docker 主機駐留在哪裡。如果您使用的是 VirtualBox,請嘗試執行:

碼頭機器環境

http://javagoogleappspot.blogspot.com/2018/07/docker-basics.html

引用自:https://serverfault.com/questions/772118