Skip to content

Docker Compose ​

用 YAML 定义并管理多容器应用。命令优先用 docker compose(空格);旧独立包为 docker-compose。

常用命令 ​

bash
# 指定配置文件
docker compose -f compose.yml <command>

# 启动与关闭
docker compose up -d  # 后台创建并启动容器
docker compose down   # 停止并移除容器、网络

# 已有容器管理
docker compose start    # 启动已停止的容器
docker compose stop     # 停止容器,保留容器
docker compose restart  # 重启容器,不应用新镜像或配置

# 镜像构建与更新
docker compose build                           # 构建镜像,不启动容器
docker compose pull                            # 拉取镜像,不启动容器
docker compose up -d --build --force-recreate  # 构建镜像并强制重建容器

# 状态与排查
docker compose ps           # 查看容器状态
docker compose logs -f      # 持续查看日志
docker compose exec api sh  # 进入 api 服务容器

更新后仍运行旧版本 ​

down 默认不删除或更新镜像,随后 up -d 仍可能使用旧镜像。按部署方式更新,通常无需先执行 down:

bash
# 仓库镜像(image):拉取并应用配置标签的最新镜像
docker compose pull && docker compose up -d

# 源码构建(build):更新源码、构建镜像并重建容器
git pull --ff-only && docker compose up -d --build --force-recreate
  • --ff-only:仅允许快进拉取,分支分叉时停止。
  • --build:启动前构建镜像。
  • --force-recreate:强制重建容器,不更新镜像;up 检测到镜像变化时会自动重建,可省略。
  • 固定版本标签需修改 image 才能升级版本。

Compose 文件骨架 ​

Compose Specification 下 version 字段已非必需。

yaml
services:
  web:
    build:
      context: ./web
      dockerfile: Dockerfile
    ports:
      - '8080:8080'
    environment:
      - API_URL=http://api:3000
    volumes:
      - ./web:/app
    networks:
      - webnet
    depends_on:
      - api
    restart: unless-stopped

  api:
    image: my-api:latest
    ports:
      - '3000:3000'
    networks:
      - webnet

volumes:
  db-data:

networks:
  webnet:

文件字段与命令参数对应关系 ​

Compose 字段docker container run
image镜像名
container_name--name
environment-e / --env
env_file--env-file
volumes-v / --mount
ports-p / --publish
networks--network
restart--restart
command镜像后的命令(覆盖 CMD)
entrypoint--entrypoint
working_dir-w
user-u

补充:

  • build:需先 docker image build,没有单条 run 等价。
  • depends_on:多容器启动顺序,单容器 run 无对应项。
  • expose:仅声明端口,不映射到宿主机,不等于 -p。

基于 MIT 许可发布