Docker-关于监听端口

1
docker run -di --name=jenkins -p 8080:8080 -v /mydata/jenkins_home/:/ver/jenkins_home jenkins/jenkins:lts

1. 简单介绍

以这段例子为例,当我们在宿主机访问localhost:8080时,也就是对应到容器内部的8080端口(这是某个容器服务默认的监听端口)

2. 如何获得监听端口

方法 1:查看官方文档

通常,官方文档或镜像描述会提供信息。例如,Jenkins 官方镜像文档会说明它默认监听在 8080 端口。你可以在 Docker Hub 或相关项目的文档中查找这些信息。

方法 2:检查 Dockerfile

如果你有容器镜像的 Dockerfile,查看其中的 EXPOSE 指令。EXPOSE 指令声明了容器内服务监听的端口。示例:

1
EXPOSE 8080

这表示该镜像的服务在 8080 端口监听。

方法 3:使用 docker inspect 命令

可以使用 docker inspect 命令查看容器的详细信息,其中包括端口映射和容器内部的端口配置。示例:

1
docker inspect <container_id_or_name>

在输出结果中查找 ExposedPorts 部分。例如:

1
2
3
"ExposedPorts": {
"8080/tcp": {}
}

方法 4:进入容器内部

你可以进入容器内部,使用命令行工具检查正在监听的端口。使用 docker exec 命令进入容器:

1
docker exec -it <container_id_or_name> /bin/bash

进入容器后,可以使用以下命令来检查正在监听的端口:

1
netstat -tuln

或:

1
ss -tuln

这些命令会列出所有监听的端口。例如,输出可能如下所示:

1
2
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN

这表示有一个服务在 8080 端口监听。

方法 5:查看容器日志

容器启动后,查看其日志可能提供一些线索。例如,使用 docker logs 命令:

1
docker logs <container_id_or_name>

如果是一个 web 服务,日志中通常会记录服务启动时监听的端口信息。