compose

# 启动服务 docker compose up docker compose up -d # 后台运行 docker compose up --build # 重新构建

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "compose" with this command: npx skills add chaterm/terminal-skills/chaterm-terminal-skills-compose

Docker Compose 编排

概述

多容器编排、环境变量、网络配置等技能。

基础命令

启动服务

docker compose up docker compose up -d # 后台运行 docker compose up --build # 重新构建

停止服务

docker compose down docker compose down -v # 同时删除卷 docker compose down --rmi all # 同时删除镜像

查看状态

docker compose ps docker compose ps -a

查看日志

docker compose logs docker compose logs -f # 实时跟踪 docker compose logs service_name

执行命令

docker compose exec service_name sh docker compose run service_name command

重启服务

docker compose restart docker compose restart service_name

扩缩容

docker compose up -d --scale web=3

配置文件

基础结构

docker-compose.yml

version: "3.9"

services: web: image: nginx:alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html depends_on: - api

api: build: ./api environment: - DATABASE_URL=postgres://db:5432/mydb depends_on: - db

db: image: postgres:15 volumes: - db_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: secret

volumes: db_data:

networks: default: driver: bridge

服务配置详解

build

services: app: # 简单形式 build: ./app

# 完整形式
build:
  context: ./app
  dockerfile: Dockerfile.prod
  args:
    - VERSION=1.0
  target: production
  cache_from:
    - myapp:cache

ports

services: web: ports: - "80:80" # HOST:CONTAINER - "443:443" - "8080-8090:8080-8090" # 端口范围 - "127.0.0.1:3000:3000" # 绑定特定 IP

volumes

services: app: volumes: # 命名卷 - data:/var/lib/data # 绑定挂载 - ./config:/etc/app/config:ro # 匿名卷 - /var/lib/data

volumes: data: driver: local

environment

services: app: environment: - NODE_ENV=production - DATABASE_URL=postgres://localhost/db # 或使用映射形式 environment: NODE_ENV: production DATABASE_URL: postgres://localhost/db # 从文件加载 env_file: - .env - .env.local

depends_on

services: web: depends_on: - db - redis # 带条件 depends_on: db: condition: service_healthy redis: condition: service_started

healthcheck

services: web: healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s

deploy(Swarm 模式)

services: web: deploy: replicas: 3 resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256M restart_policy: condition: on-failure delay: 5s max_attempts: 3

网络配置

自定义网络

services: frontend: networks: - frontend

backend: networks: - frontend - backend

db: networks: - backend

networks: frontend: driver: bridge backend: driver: bridge internal: true # 内部网络,无外部访问

网络别名

services: db: networks: backend: aliases: - database - postgres

环境变量

.env 文件

.env

POSTGRES_VERSION=15 POSTGRES_PASSWORD=secret APP_PORT=3000

docker-compose.yml

services: db: image: postgres:${POSTGRES_VERSION} environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

app: ports: - "${APP_PORT}:3000"

多环境配置

docker-compose.override.yml(开发环境,自动加载)

docker-compose.prod.yml(生产环境)

使用多个配置文件

docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

docker-compose.yml(基础配置)

services: app: image: myapp:latest

docker-compose.override.yml(开发覆盖)

services: app: build: . volumes: - .:/app environment: - DEBUG=true

docker-compose.prod.yml(生产覆盖)

services: app: restart: always environment: - DEBUG=false

常见场景

场景 1:Web 应用栈

version: "3.9"

services: nginx: image: nginx:alpine ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - app

app: build: . environment: - DATABASE_URL=postgres://postgres:secret@db:5432/mydb - REDIS_URL=redis://redis:6379 depends_on: db: condition: service_healthy redis: condition: service_started

db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: secret POSTGRES_DB: mydb healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 5

redis: image: redis:7-alpine volumes: - redis_data:/data

volumes: postgres_data: redis_data:

场景 2:开发环境热重载

version: "3.9"

services: app: build: context: . target: development volumes: - .:/app - /app/node_modules # 排除 node_modules environment: - NODE_ENV=development command: npm run dev ports: - "3000:3000"

场景 3:数据库初始化

services: db: image: postgres:15 volumes: - postgres_data:/var/lib/postgresql/data - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro environment: POSTGRES_PASSWORD: secret

场景 4:日志配置

services: app: logging: driver: json-file options: max-size: "10m" max-file: "3"

故障排查

查看配置

docker compose config

查看服务日志

docker compose logs service_name --tail=100

进入容器

docker compose exec service_name sh

查看网络

docker network ls docker network inspect project_default

重建服务

docker compose up -d --force-recreate service_name

问题 排查方法

服务无法启动 docker compose logs , 检查依赖

网络不通 检查网络配置、服务名

卷挂载问题 检查路径、权限

环境变量未生效 docker compose config 验证

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

cron

No summary provided by upstream source.

Repository SourceNeeds Review
General

system-admin

No summary provided by upstream source.

Repository SourceNeeds Review
General

systemd

No summary provided by upstream source.

Repository SourceNeeds Review
General

vpn

No summary provided by upstream source.

Repository SourceNeeds Review