Docker 是一个开源平台,能够让开发者轻松地打包、部署、运行应用程序。其中最重要的组成部分就是容器,容器是被打包的应用程序及其依赖关系的轻量级标准化部署单元。在一个容器内,应用程序可以在隔离的环境下运行。
在使用 Docker 运行容器时,经常需要指定容器端口号,以便在宿主机上访问容器内的服务。这篇文章将为大家介绍如何在 Docker 容器中指定端口号以及如何在宿主机上访问容器内的服务。
Docker 容器指定端口号
语法
在 Dockerfile 中,通过 EXPOSE
指令来指定容器应该监听哪一个端口。语法如下:
EXPOSE <port> [<port>/<protocol>...]
其中,<port>
是必选的参数,指定容器监听的端口号。<protocol>
是可选的参数,指定端口号使用的协议,如:TCP 或 UDP。
下面是一个使用 EXPOSE
指令的例子:
FROM ubuntu:18.04 # 指定容器监听的端口号 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
上面的例子中,我们指定容器监听 80 端口,因为这个容器中运行的是 Nginx Web 服务器。
运行容器时指定映射端口
我们在启动容器时,可以使用 --publish
或 -p
参数来映射容器内指定的端口到宿主机上,语法如下:
docker run -p <host_port>:<container_port> <image>
其中,<host_port>
是宿主机上的端口号,<container_port>
是容器中要映射的端口号,<image>
是要运行的 Docker 镜像名称。
下面是一个使用 docker run
启动一个 Node.js Web 应用的例子,将宿主机的 3000 端口映射到容器中的 80 端口:
docker run -p 3000:80 node-app
在这个例子中,我们将 Node.js Web 应用的容器内的 80 端口映射到宿主机的 3000 端口上,这样我们就可以通过 http://localhost:3000
来访问该应用程序。
如何访问容器内的服务
我们可以使用 Docker CLI 工具来查看容器的端口映射情况:
docker ps
这个命令会列出当前正在运行的所有容器信息,包括容器 ID、镜像名称、状态、端口等信息。
如果想要通过宿主机访问 Docker 容器中的服务,可以使用容器的 IP 地址加上映射的端口号。可以通过 docker inspect
命令来获取容器的 IP 地址:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container_id>
其中 <container_id>
是容器的 ID。
这样就可以通过 http://<container_ip>:<host_port>
来访问容器内的服务了。
总结
在使用 Docker 运行容器时,通过指定端口号,我们可以方便地在宿主机上访问容器内的服务。同时,我们也可以使用 Docker CLI 工具来查看容器的端口映射情况,和获取容器的 IP 地址。这些操作都是非常简单、实用的技能,对于前端开发者来说也是一个比较必要的技巧。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64603b47968c7c53b01fbda9