Docker Compose:把服务、网络和数据卷写进配置

阿远
2026-10-29 / 0 评论 / 0 阅读 / 正在检测是否收录...

Compose 适合把服务依赖与网络写进文件,但只贴配置而没有应用源码,读者无法运行。下面换成一个完整的双 Nginx HTTP 实验:入口代理转发到内部 backend,不涉及数据库或业务密码。

准备实验目录

先确认 Docker Engine 与 Compose 插件可用,使用独立目录,不覆盖既有项目。以下保存为 compose.yaml:

services:
  web:
    image: nginx:stable-alpine
    ports:
      - "127.0.0.1:18080:80"
    volumes:
      - ./proxy.conf:/etc/nginx/conf.d/default.conf:ro
    depends_on:
      backend:
        condition: service_healthy
  backend:
    image: nginx:stable-alpine
    volumes:
      - ./html:/usr/share/nginx/html:ro
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/"]
      interval: 5s
      timeout: 2s
      retries: 5

同目录保存 proxy.conf:

server {
    listen 80;
    location / {
        proxy_pass http://backend:80;
    }
}

准备网页并运行:

mkdir -p html
printf '%s\n' 'compose backend ok' > html/index.html
docker compose -p notes-compose-lab config
docker compose -p notes-compose-lab up -d
docker compose -p notes-compose-lab ps
curl --max-time 10 http://127.0.0.1:18080/

预期返回 compose backend ok,backend 最终为 healthy。前提是 18080 空闲、镜像可以拉取。SELinux 环境如有挂载拒绝,应核对标签并按实验目录作用范围处理,不要关闭 SELinux。

网络与依赖

Compose 默认创建项目网络,web 通过服务名 backend 解析地址。容器内 127.0.0.1 指当前容器,不能用它指代另一个服务。depends_on 默认只管启动顺序;service_healthy 等待定义的健康检查通过,但依赖后来故障不会自动完成业务重连,应用仍需重试逻辑。

排错与清理

docker compose -p notes-compose-lab logs --tail 30 web backend
docker compose -p notes-compose-lab down

这里没有声明数据卷,html 内容仍在宿主实验目录。若使用命名卷存数据库,卷仍需独立备份;down -v 可能删除项目管理的命名卷和匿名卷,不删除 external 卷。先确认项目名与用途再清理,不碰其他项目。

实验边界

stable-alpine 是浮动标签,正式发布需固定可追踪 digest。示例只验证 HTTP 转发,不含数据库就绪、登录会话、TLS 或生产发布。参考:Compose 启动顺序。

内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
0

评论 (0)

取消