一千萬個為什麽

搜索

如何連接到docker容器?



我有以下 Dockerfile

FROM ubuntu:latest
MAINTAINER Valter Silva
RUN apt-get update
RUN apt-get install -y apache2
ADD index.html /var/www/html/
CMD /usr/sbin/apache2ctl -D FOREGROUND
EXPOSE 22
EXPOSE 80

這就是我構建 image 的方法:

docker build --tags mob:latest .

接下來,這是我如何帶上我的容器:

docker run -d --name website mob

然後我通過以下命令檢查我的容器的IP:

docker network inspect bridge

我想對此IP執行 curl 以確保我的網站正常運行:

curl 172.17.0.2

但由於某種原因,我的命令一直懸而未決。我不知道為什麽會發生這種情況。我在MacOS系統上運行 docker

轉載註明原文: 如何連接到docker容器?

一共有 3 個回答:

您可以通過以下方式了解您的網站是否已啟動並正在運行,

Map both the ports of inside container to the host using -p option and try to curl localhost:port

場景: -

使用以下命令運行容器,

docker run -d --name website -p 80:80 -p 22:22 mob

Explanation:- -p host_port:container's_port

Now, curl localhost:80 or localhost:22

如果您的服務正常運行,您將獲得響應

P.S: - 在運行 docker run 命令之前,確保主機上的80和20都沒有運行

Your command (curl 172.17.0.2 ) is hanging not due to expose port .It is clear
for security reasons, in Dockerfile EXPOSE command is not working, you need to manually need to add -p host_port:container_port in docker run command & it helps connect your container outside your machine.

If service is not running on 80 port , then you get message like this shell> curl 172.17.0.2 curl: (7) Failed to connect to 172.17.0.2 port 80: Connection refused

curl command is hanging due to non interactive & non TTY shell .

使用-it選項運行docker run命令:

碼頭運行-d -it -p 80:80 - 名稱網站暴徒

這取決於你想要存檔的內容。如果您的容器是從外部訪問的,您需要端口映射: -p $ HOSTPORT:$ CONTAINERPORT 因此,您可以使用 -p 80:80 作為參數 docker run 公開端口80。

如果情況並非如此(例如,通過反向代理訪問的後端服務器),則可以簡單地使用 docker exec 在容器中執行 curl 命令。這還具有不需要外部IP的優點,只需使用 localhost 即可。為ssh公開端口22也是更好的選擇。

docker exec -it $CONTAINERNAME bash

其中 bash 可以被交互模式的任何登錄shell替換。您也可以直接在這裏傳遞命令:

docker exec -it $CONTAINERNAME curl http://localhost

execute 命令具有可以在已經運行的容器中使用的好處。因此,例如,您可以在一段時間後檢查容器中的服務是否消失。