一、基础结构
Docker Compose 通过 docker-compose.yml 文件定义服务,关键配置字段:
• ports : 配置端口映射
• volumes : 配置路径映射
示例基础模板:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
二、端口映射配置
1、基础语法
ports:
- "[宿主机IP:]宿主机端口:容器端口"
- "容器端口" # 自动分配宿主机端口
2、配置示例
services:
webapp:
image: my-web-app
ports:
- "80:8080" # 宿主机80 → 容器8080
- "127.0.0.1:3000:3000" # 仅本地访问
- "443" # 随机分配宿主机端口
3、特殊格式
# 长格式配置(支持高级选项)
ports:
- target: 80 # 容器端口
published: 8080 # 宿主机端口
protocol: tcp # 协议类型
mode: host # 主机模式
三、路径映射配置
1、基础语法
volumes:
- "宿主机路径:容器路径[:权限]"
- "命名卷:容器路径"
2、配置示例
services:
database:
image: mysql:5.7
volumes:
- /var/lib/mysql_data:/var/lib/mysql # 绝对路径
- ./config:/app/config # 相对路径
- app-data:/data # 命名卷
- /etc/hosts:/etc/hosts:ro # 只读权限
volumes:# 声明命名卷(Docker会自动创建)
app-data:
3、常用模式对比
类型 |
示例 |
特点 |
绝对路径 |
/host/path:/container |
明确指定宿主机路径 |
相对路径 |
./config:/app/config |
相对于 compose 文件位置 |
命令卷 |
db-data:/var/lib/mysql |
数据持久化,便于管理 |
匿名卷 |
/var/lib/mysql |
自动生成卷名,不易追踪 |
四、完整组合示例
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./logs:/var/log/nginx
- static-data:/usr/share/nginx/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
static-data:
mysql-data:
五、验证配置
1、 启动服务:
docker-compose up -d
2、 查看端口映射:
docker-compose port web 80 # 查看web服务的80端口映射
3、 检查卷挂载:
docker-compose exec web ls /usr/share/nginx/html
docker volume ls # 查看命名卷
4、 查看详细配置:
docker-compose config # 验证配置文件语法
六、注意事项
1、 路径相关:
• 使用相对路径时,基于 docker-compose.yml 文件所在目录
• 文件权限问题:容器内用户需有访问挂载目录的权限
2、 端口相关:
• 避免使用 0.0.0.0 隐式绑定(默认绑定所有IP)
• 生产环境建议指定协议类型:8080:80/tcp
3、 版本差异:
• Compose 文件版本影响语法(推荐使用 3.x 版本)
• 不同版本对网络模式的支持可能不同
4、 数据持久化:
• 重要数据务必使用命名卷或明确路径
• 匿名卷在删除容器后可能被自动清理
通过本教程,你可以掌握 Docker Compose 中路径和端口映射的核心配置方法。实际应用时建议配合环境变量、网络配置等实现完整的服务编排。 |