能跑起来的 docker-compose.yml 必须包含 version、services 及其 image/ports 等关键参数:version: "3.8",services 下定义 nginx 服务,image: nginx:alpine,ports: - "80:80",即可一键启动稳定运行。
写一个能跑起来的 docker-compose.yml,核心就三件事:选对版本、定义好服务、配清楚关键参数。不需要一上来就堆高级功能,先让 nginx 或 mysql 这类单服务稳稳启动,再逐步加依赖和网络。
明确 version 字段
这是第一行必须写的,它决定了你能用哪些配置项,也影响 Docker 引擎兼容性。当前推荐用 3.8 或 3.9,别写太老的 2.x 版本,避免功能受限或语法过时。
- 查自己 Docker 版本:
docker --version,再对照官方版本映射表 - 写法示例:
version: "3.8"(注意引号可选,但带引号更稳妥)
从 services 开始定义服务
每个服务就是一个容器,比如 web、db、redis。名字可以自定义,但要小写字母+短横线,不能有空格或大写。
-
image:直接拉取镜像,如nginx:alpine或mysql:8.0 -
ports:端口映射,格式是"宿主机端口:容器端口",比如- "8080:80" -
volumes:挂载本地文件或目录,例如- ./html:/usr/share/nginx/html,让修改 HTML 立即生效 -
environment:传环境变量,MySQL 必须设MYSQL_ROOT_PASSWORD,PostgreSQL 用POSTGRES_PASSWORD
按需添加 networks 和 volumes
单服务起步时可以省略,Docker Compose 会自动创建默认网络。但两个服务要通信(比如 Web 连数据库),就得显式定义网络并让它们加入同一网络。
- 在
services下用networks: [my-net]指定服务归属 - 在文件末尾加
networks:块,写my-net: {}即可启用默认桥接网络 - 持久化数据(如 MySQL 数据)建议用命名卷,写在
volumes:块里,比如db-data:,再在服务中用volumes: - db-data:/var/lib/mysql
检查与启动的小技巧
写完保存为 docker-compose.yml(注意文件名拼写和大小写),然后执行:
-
docker compose config:验证 YAML 格式是否合法,有没有缩进错误或字段拼错 -
docker compose up:前台运行,看日志输出是否正常 -
docker compose up -d:后台启动,适合长期运行 -
docker compose ps:查看当前运行的服务状态











