要确定在启动Docker镜像时需要映射哪些端口和目录,可以通过以下方法:

# 1. 查阅镜像官方文档

Docker Hub 上的镜像说明页面(如 hub.docker.com)通常会明确标注:

  • 端口:Expose 指令暴露的端口(如Nginx暴露 80/tcp)
  • 目录: 需要挂载的卷(如MySQL 的 /var/lib/mysql)

示例

# Nginx官方示例
docker run -p 8080:80 -v /宿主机/html:/usr/share/nginx/html nginx:latest

# 2. 查看镜像的 Dockerfile

在Docker Hub或GitHub上查找镜像的Dockerfile

  • 端口:搜索EXPOSE 指令(如 EXPOSE 8080)
  • 目录:搜索 VOLUME 指令(如 VOLUME /data)

示例

FROM alpine
EXPOSE 8080 # 暴露8080端口
VOLUME /data # 挂载/data目录

# 3. 使用docker inspect命令

查看已拉取镜像的元数据

docker inspect 镜像名:标签
  • 端口:检查Config.ExposedPorts字段
  • 目录:检查Config.Volumes 或 Config.WorkingDir 字段

# 4. 运行临时容器测试

启动一个简单容器进入内部查看

docker run -it 镜像名:标签 sh
  • 端口:检查进程监听的端口(如 netstat -tuln)
  • 目录:查找写入数据的目录(如日志、数据库文件)

常见应用的映射示例

应用 端口映射 目录映射
Nginx -p 80:80 -v /宿主机/html:/usr/share/nginx/html
MySQL -p 3306:3306 -v /宿主机/mysql:/var/lib/mysql
Redis -p 6379:6379 -v /宿主机/redis:/data
Postgres -p 5432:5432 -v /宿主机/pgdata:/var/lib/postgresql/data

# 启动命令模版

docker run -d \
  --name 容器名 \
  -p 宿主机端口:容器端口 \
  -v 宿主机目录:容器目录 \
  镜像名:标签

TIP

关键原则

  • 端口映射:使外部能访问容器服务(如Web服务的80端口)
  • 目录映射:持久化重要数据(如数据库、配置文件),避免容器删除后丢失数据。