Docker - 管理端口
Docker - 管理端口
Section titled “Docker - 管理端口”在 Docker 容器中运行的应用程序通常需要在特定的网络端口上暴露服务(例如,Web 服务器在 80 端口,数据库在 3306 端口)。为了从 Docker 宿主机或外部网络访问这些服务,你需要将端口从宿主机映射到容器内部的端口。
暴露端口(Exposing) vs. 发布端口(Publishing)
Section titled “暴露端口(Exposing) vs. 发布端口(Publishing)”- 暴露端口(
EXPOSE在 Dockerfile 中): 这条指令充当文档说明。它通知镜像的使用者应用程序打算监听哪些端口。它不会使端口可以从宿主机访问。 - 发布端口(
-p或--publish标志在docker run中): 这会主动将 Docker 宿主机上的一个端口映射到容器内部的一个端口。这使得容器的服务可以从外部访问。
使用 docker run 发布端口
Section titled “使用 docker run 发布端口”使用 docker run 命令时,使用 -p(或 --publish)标志来映射端口。
最常见的格式是:
-p hostPort:containerPort:将容器内部的containerPort映射到 Docker 宿主机所有接口上的hostPort。-p ip:hostPort:containerPort:将containerPort映射到 Docker 宿主机特定ip地址上的hostPort。-p containerPort:将containerPort映射到 Docker 宿主机上一个随机选择的可用高位端口。当你不关心具体的宿主机端口时很有用。-p hostPort:containerPort/udp:指定使用 UDP 协议而不是默认的 TCP。
示例:运行 Jenkins
Section titled “示例:运行 Jenkins”官方 Jenkins 镜像 (jenkins/jenkins:lts) 通常暴露 8080 端口用于 Web UI,暴露 50000 端口用于代理通信。
# Run Jenkins, mapping host 8080 to container 8080 (TCP)# and host 50000 to container 50000 (TCP)docker run -d --name myjenkins \ -p 8080:8080 \ -p 50000:50000 \ jenkins/jenkins:lts运行此命令后,你可以通过在浏览器中访问 http://localhost:8080 或 http://<docker-host-ip>:8080 来访问 Jenkins UI。
示例:随机宿主机端口
Section titled “示例:随机宿主机端口”如果你运行多个实例或不需要固定的宿主机端口:
# Run Nginx, mapping container port 80 to a random host portdocker run -d --name random-port-nginx -P nginx:stable-alpine# Note the capital -P publishes ALL exposed ports to random host ports
# Or map a specific container port to a random host portdocker run -d --name specific-random-nginx -p 80 nginx:stable-alpine要找出分配了哪个随机宿主机端口,请使用 docker ps 命令:
docker ps查看容器的 PORTS 列(例如,0.0.0.0:32768->80/tcp)。然后你将通过 http://localhost:32768 访问服务。
查找暴露的端口(docker inspect)
Section titled “查找暴露的端口(docker inspect)”虽然镜像文档(例如,在 Docker Hub 上)通常会列出暴露的端口,但你也可以通过检查镜像或正在运行的容器来查找它们。
# Inspect the Jenkins imagedocker inspect jenkins/jenkins:lts在 JSON 输出的 "ContainerConfig" 或 "Config" 部分中查找 "ExposedPorts" 键。这显示了 Dockerfile 中由 EXPOSE 定义的端口。
# Inspect a running container to see actual mappingsdocker inspect myjenkins在 "NetworkSettings" 部分中查找 "Ports" 键,以查看实际的宿主机端口映射。
正确管理端口映射对于使容器化服务可访问至关重要。