
从 docker run 到 Docker Compose
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。无需使用带有许多标志的长 docker run 命令,您可以在 docker-compose.yml 文件中描述服务,并通过简单的命令管理它们。
本指南展示了如何将 docker run 命令转换为 Docker Compose 格式。

基本转换示例
一个典型的 docker run 命令:
docker run -d \
--name my-web-app \
-p 8080:80 \
-e NODE_ENV=production \
-e DATABASE_URL=postgres://localhost:5432/mydb \
-v /host/data:/app/data \
--restart unless-stopped \
my-web-app:latest
等效的 docker-compose.yml:
version: '3.8'
services:
my-web-app:
image: my-web-app:latest
container_name: my-web-app
ports:
- "8080:80"
environment:
- NODE_ENV=production
- DATABASE_URL=postgres://localhost:5432/mydb
volumes:
- /host/data:/app/data
restart: unless-stopped
将 docker run 标志映射到 Compose
| docker run 标志 | Compose 键 | 示例 |
|---|---|---|
--name |
container_name |
container_name: myapp |
-p 8080:80 |
ports |
- "8080:80" |
-e VAR=val |
environment |
- VAR=val |
-v /host:/container |
volumes |
- /host:/container |
--restart |
restart |
restart: unless-stopped |
--network |
networks |
networks: [mynet] |
--link |
depends_on |
depends_on: [db] |
--memory 512m |
mem_limit |
mem_limit: 512m |
--cpus 0.5 |
cpus |
cpus: 0.5 |
--health-cmd |
healthcheck.test |
test: ["CMD", "curl", "-f", "http://localhost"] |
--user |
user |
user: "1000:1000" |
--entrypoint |
entrypoint |
entrypoint: /app/start.sh |
--command |
command |
command: npm start |

多服务示例:Web + 数据库
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/myapp
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: myapp
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
volumes:
postgres_data:
Docker Compose 命令
# 启动所有服务(后台运行)
docker compose up -d
# 停止所有服务
docker compose down
# 停止并删除卷
docker compose down -v
# 查看日志
docker compose logs -f
# 查看特定服务的日志
docker compose logs -f web
# 在运行中的容器中执行命令
docker compose exec web bash
# 重新构建镜像
docker compose build
# 扩展服务
docker compose up -d --scale worker=3
# 查看运行中的服务
docker compose ps

Compose 中的环境变量
使用 .env 文件(Compose 自动加载)来管理密钥和环境特定配置:
# .env 文件
POSTGRES_PASSWORD=secretpassword
NODE_ENV=production
API_KEY=abc123
# docker-compose.yml
services:
web:
environment:
- NODE_ENV=${NODE_ENV}
- API_KEY=${API_KEY}
db:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
.env 文件应添加到 .gitignore 中。可以共享一个包含占位值的 .env.example 文件。
重启策略
| 策略 | 行为 |
|---|---|
no |
从不重启(默认) |
always |
始终重启,包括 Docker 守护进程重启时 |
on-failure |
仅在退出码非零时重启 |
unless-stopped |
始终重启,除非手动停止 |
使用此工具
粘贴一个 docker run 命令,即可立即获得等效的 Docker Compose YAML。该工具会解析所有标志和选项,并生成格式正确的 Compose 服务定义。
-> 尝试 Docker Run 转 Compose 转换器