docker expose暴露端口 33

作者 : 慕源网 本文共2019个字,预计阅读时间需要6分钟 发布时间: 2021-12-17 共402人阅读

docker expose暴露端口

Docker EXPOSE 是 Dockerfile 中指定的 Dockerfile 指令,用于通知此 Dockerfile 创建的镜像在运行容器时将侦听此端口。仅说明容器需要对外暴露的端口,没有实际的暴露出去,告诉运行容器的人需要公开或发布的端口,以允许从外部与容器进行通信。我们必须在运行容器时使用“-p”选项来发布端口,以便可以从外部访问容器内的应用程序。

语法:

以下是 Dockerfile 中“EXPOSE”指令的语法:

………..
EXPOSE <port> [<port>/<protocol>…]

我们必须至少指定一个端口。协议是可选的,我们可以指定应用程序是要侦听 TCP 端口还是 UDP 端口,如果不指定协议,则默认使用 TCP。

docker expose暴露端口 33

Docker EXPOSE 示例

下面给出了 Docker EXPOSE 的示例:

我们将使用 Dockerfile 中提到的“EXPOSE”指令创建两个 nginx 镜像,并尝试从不同的容器和主机访问容器内的 nginx。

步骤1:首先,我们需要创建两个Dockerfile,我们会在第一个Dockerfile中使用’EXPOSE’指令,我们将创建第二个没有’EXPOSE’指令的。

带有“EXPOSE”指令的 Dockerfile:

代码:

FROM ubuntu
RUN apt-get update && apt-get install -y nginx
RUN apt-get install -y curl
EXPOSE 80

没有“EXPOSE”指令的 Dockerfile:

代码:

FROM ubuntu
RUN apt-get update && apt-get install -y nginx
RUN apt-get install -y curl

第二步:让我们使用上面两个Dockerfile来创建Docker镜像。

代码:

docker build -t nginx:expose .
docker build –t nginx:no_expose .
docker image ls

输出:

docker expose暴露端口 33

docker expose暴露端口 33

docker expose暴露端口 33

第 3 步:现在,使用 ‘nginx:expose’ 镜像启动一个容器,连接到它,并访问 nginx 的默认页面。

代码:

docker run -d nginx:expose
docker exec -it <container_ID> sh
#curl http://locahost:80

输出:

docker expose暴露端口 33

在上面的快照中,我们可以看到 nginx 默认页面是可以访问的。

第 4 步:让我们检查这个容器的 IP 地址,以便我们可以从不同的容器连接它。

代码:

#ip addr

输出:

docker expose暴露端口 33

第五步:让我们创建另一个已经安装了 curl 的容器,并使用 nginx:expose 容器的 IP 地址访问 nginx 默认页面。

代码:

docker run -d  ubuntu:curl sleep 3600
docker exec -it <container_id> sh
#curl http://<IP_Address>:80

输出:

docker expose暴露端口 33

在上面的快照中,我们可以看到我们可以成功访问不同容器的 nginx 默认页面。

注意: ‘ubuntu:curl’ 镜像是使用以下 Dockerfile 创建的:

FROM Ubuntu

RUN apt-get update && apt-get install curl -y

第 6 步:最后,让我们尝试从主机访问它。

代码:

curl http://localhost:80

输出:

docker expose暴露端口 33

第7步:所以,我们无法访问nginx默认页面,因为在第3步运行容器时端口没有暴露。让我们运行另一个具有相同镜像’nginx:expose’的容器,但这次暴露了80端口。

代码:

docker run -d  -p 80:80 nginx:expose

输出:

docker expose暴露端口 33

在上面的快照中,我们可以看到我们也可以从主机的 80 端口访问 nginx 默认页面。

第 8 步:让我们使用 ‘nginx:no_expose’ 镜像创建一个新容器,并在主机上公开端口 8080,因为我们已经使用了端口 80。

代码:

docker run -d -p 8080:80 nginx:no_expose
docker exec -it <container_ID> sh
#curl http://locahost:80

输出:

docker expose暴露端口 33

在上面的快照中,我们可以从容器内部访问默认页面。

第 9 步:让我们检查容器的 IP 地址并使用不同容器访问它。

代码:

#ip addr

输出:

docker expose暴露端口 33

代码:

docker exec -it <container_ID> sh

输出:

docker expose暴露端口 33

在上面的快照中,我们可以看到 nginx 默认值也可以从不同的容器访问。

第十步:最后从主机使用8080端口访问

代码:

curl http://localhost:8080

输出:

docker expose暴露端口 33

结论

上面的场景阐明了“EXPOSE”指令仅用于Dockerfile,因为我们已经看到无论我们是否使用“EXPOSE”指令,两个容器在功能方面的行为方式都是相同的.

推荐文章

这是 Docker EXPOSE 的指南。这里我们讨论介绍,docker expose暴露端口使用示例。

本文是docker快速入门教程系列的一部分您也可以查看以了解更多信息 –

 

 


慕源网 » docker expose暴露端口 33

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录