Port
如何在 docker 容器中公開埠
我已經在自定義埠(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