K
K
Kumu's wiki
搜索文档…
Compose 网络
默认 Compose 会给应用设置一个单独的网络。每个服务中的容器加入到默认的网络中,互相可以访问,并通过和容器名一样的主机名来服务发现。
注意:应用网络命名依赖项目名,项目名称基于当前所在目录名。可以通过 --project-name 选项或者 COMPOSE_PROJECT_NAME 环境变量来覆盖。
例如,你的 app 所在目录为 myapp,你的 docker-compose.yml 内容如下:
1
version: "3"
2
services:
3
web:
4
build: .
5
ports:
6
- "8000:8000"
7
db:
8
image: postgres
9
ports:
10
- "8001:5432"
Copied!
当你运行 docker-compose up,会发生如下情况:
    1、一个命名为 myapp_default 的网络创建
    2、一个使用 web 配置的容器创建。它以 web 为名加入到 myapp_default 网络
    3、一个使用 db 配置的容器创建。它以 db 为名加入到 myapp_default 网络
现在每个容器都可以通过主机名 webdb 获取相应容器的 IP 地址。如 web 应用代码可以通过 postgres://db:5432 连接使用 Postgres 数据库。

更新容器

如果服务配置变更了,并且运行 docker-compose up 更新它,旧的容器会被移除,新的容器会以不同的 IP 地址但是相同的名字加入到网络。运行的容器可以使用名字连接到新的地址,但是旧的地址已经不再提供服务。
如果有任何容器与旧的容器连接,那么会被关闭。容器有责任检测这种情况,并再次查找名称重新连接。

Links

Links 允许定义额外的别名,通过该别名可以从另外一个服务访问服务。默认情况下,任何服务都可以通过服务名访问,不需要额外启用。接下来的例子中,db 服务可以被 webdbdatabase 主机名访问到:
1
version: "3"
2
services:
3
4
web:
5
build: .
6
links:
7
- "db:database"
8
db:
9
image: postgres
Copied!
1
version: "3"
2
services:
3
4
proxy:
5
build: ./proxy
6
networks:
7
- frontend
8
app:
9
build: ./app
10
networks:
11
- frontend
12
- backend
13
db:
14
image: postgres
15
networks:
16
- backend
17
18
networks:
19
frontend:
20
# Use a custom driver
21
driver: custom-driver-1
22
backend:
23
# Use a custom driver which takes special options
24
driver: custom-driver-2
25
driver_opts:
26
foo: "1"
27
bar: "2"
Copied!

配置默认网络

1
version: "3"
2
services:
3
4
web:
5
build: .
6
ports:
7
- "8000:8000"
8
db:
9
image: postgres
10
11
networks:
12
default:
13
# Use a custom driver
14
driver: custom-driver-1
Copied!

使用之前已存在的网络

1
networks:
2
default:
3
external:
4
name: my-pre-existing-network
Copied!
最近更新 1yr ago