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)