使用 Docker Compose 网络连接容器
使用 Docker Compose 定义多容器应用,让它们通过自动创建的桥接网络并借助服务名称相互通信
使用 Docker Compose 网络连接容器 是 CoddyKit 上的免费 Docker & Kubernetes for Developers 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Docker & Kubernetes for Developers 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Docker & Kubernetes for Developers 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
Why Compose for Networking
Running many containers and wiring their networks by hand is tedious. Docker Compose describes your whole stack in one YAML file and creates a dedicated network so services can find each other.
The Default Compose Network
When you run docker compose up, Compose creates a single user-defined bridge network for the project. Every service joins it automatically, so no manual docker network create is needed.
Service Names as Hostnames
On a Compose network, each service is reachable by its service name via built-in DNS. A service named db is reachable at the hostname db from any other service.
A Minimal Compose File
Two services on one network: a web app and a database.
version: "3.9"
services:
web:
image: myapp:latest
ports:
- "8080:80"
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secretConnecting to db by Name
Inside the web container, the connection string points to the service name, not an IP:
DATABASE_URL=postgres://postgres:secret@db:5432/postgresDefining Custom Networks
You can declare named networks to isolate groups of services.
services:
web:
image: myapp
networks: [frontend]
api:
image: myapi
networks: [frontend, backend]
db:
image: postgres
networks: [backend]
networks:
frontend:
backend:Network Isolation in Practice
In the example above, web can reach api but NOT db, because they share no network. This limits the blast radius if a frontend container is compromised.
Exposing vs Publishing Ports
expose makes a port reachable only to other containers on the network. ports publishes it to the host. Internal services like databases should usually only be exposed, never published.
Aliases for Services
You can give a service extra DNS names with aliases, handy when migrating from an old hostname.
services:
db:
image: postgres
networks:
backend:
aliases:
- database
- legacy-db
networks:
backend:Connecting to External Networks
Set a network as external: true to attach services to a network created outside this Compose file, sharing it across projects.
networks:
shared:
external: trueInspecting the Network
List and inspect the network Compose created to confirm which containers are attached.
docker network ls
docker network inspect myproject_defaultQuick Check
Test what you have learned.
Recap
You learned that Docker Compose creates a network per project, lets services talk by service name, and supports custom networks for isolation, expose vs ports, aliases, and external networks.
常见问题解答
「使用 Docker Compose 网络连接容器」课时是免费的吗?
是的 — 「使用 Docker Compose 网络连接容器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Docker & Kubernetes for Developers 课程的其余内容,请升级到 CoddyKit PRO。 Docker & Kubernetes for Developers 课程共包含 4 节课。
「使用 Docker Compose 网络连接容器」这节课中我会学到什么?
使用 Docker Compose 定义多容器应用,让它们通过自动创建的桥接网络并借助服务名称相互通信 你通过在浏览器中直接运行的动手代码来练习 Docker & Kubernetes for Developers,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Docker & Kubernetes for Developers 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Docker & Kubernetes for Developers 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用 Docker Compose 网络连接容器」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Docker & Kubernetes for Developers 课中编写并运行代码吗?
能。每节 Docker & Kubernetes for Developers 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 了解 Docker 网络类型
- 配置容器网络
- 使用卷实现数据持久化
- 使用 Docker Compose 网络连接容器