文章详情

专注互联网科技,赋能企业数字化发展

docker-compose.yml

作者:docker-compose.yml

在 `docker-compose.yml` 里: - **services**:你在文件里写的 `postgres:` 和 `api:`,叫 **服务(Services)**。 - **容器(Containers)**:当你执行 `docker compose up -d` 后,Docker 真正运行起来的东西,叫 **容器**。 **简单说:** - 你定义了 **2 个服务** → 最终会启动 **2 个容器** - `postgres` 服务 → 启动 **1 个 PostgreSQL 数据库容器** - `api` 服务 → 启动 **1 个 FastAPI 程序容器** **依赖关系(depends_on)** api: depends_on: postgres: condition: service_healthy 意思就是: - **api 服务(容器)依赖于 postgres 服务(容器)** - Docker 会先启动 `postgres`,并等它通过健康检查(healthy)之后,才会启动 `api` - 这样就保证了你的 FastAPI 不会在数据库还没准备好的时候就去连接它 为什么 `DATABASE_URL` 要写成这样? DATABASE_URL: postgresql://demo:demo@postgres:5432/demo 关键就在这里: - `@postgres:` ← **不是 localhost,也不是 IP** - `postgres` 是**服务名称**(就是你在 yml 里写的 `postgres:`) - Docker Compose 会**自动创建一个内部网络**,让两个容器能互相通信 - 在 `api` 容器里面,只要写服务名 `postgres`,就能直接访问到 `postgres` 容器里的数据库(端口 5432) 如果你写成 `@localhost:5432`,api 容器就会去连它自己,肯定连不上! 总结: - docker-compose.yml 里写的是 **服务(services) - 真正跑起来的是 **容器(containers) - 你有 2 个服务 = 2 个容器 - `api` 容器依赖 `postgres` 容器 - 它们通过**服务名称**在 Docker 内部网络里互相通信

返回新闻列表