我正在使用
Nginx
版本下的 docker-compose
创建一个
3.7
容器
我正在尝试指定
ipam
属性。但是当我阅读下面的官方参考资料时:
https://docs.docker.com/compose/compose-file/#network-configuration-reference
有一个注释,我明白
gateway
只能在版本2
下指定。
注意:目前仅版本 2 支持其他 IPAM 配置,例如网关。
所以我尝试在
gateway
属性下指定 ipam
。我的容器仍然可以创建并运行。
然后我去检查
docker-network
设置。经过我检查和观察,没有指定的gateway
。但我的 Nginx's access.log
仍然显示来自 172.19.100.1
的流量,我认为它是 gateway
。
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.100.0/24"
}
]
}
我想知道并澄清一下,在
3.7
版本下,是否有任何方法可以在gateway
文件中指定docker-compose
,或者如果我无法指定,默认值是什么?
另外,是否应该建议在版本
docker-compose
下写2
而不是3
?
这对我有用:
在您的 shell 上(选择适合您需求的 IP 范围):
docker network create --gateway "172.172.0.1" --subnet "172.172.0.0/16" awesomenet
docker-compose.yml(或开发环境中的 docker-compose.override.yml):
version: "2.4"
services:
webserver:
ports:
- "443:443"
...
networks:
- awesomenet
another_service:
...
networks:
- awesomenet
networks:
awesomenet:
external: true
截至 2024 年 2 月,Docker Compose V3 规范仍然有一个声明:
Additional IPAM configurations, such as gateway, are only honored for version 2 at the moment.
在 docker compose 文件中你仍然可以这样设置网关
version: '3.8'
networks:
default:
name: my-network
ipam:
config:
- subnet: 172.33.0.0/16
gateway: 172.33.0.1
如果您使用
docker network inspect my-network
描述此网络,您可以看到即使对于 V3,网关配置也已存储
...
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.33.0.0/16",
"Gateway": "172.33.0.1"
}
]
},
...
但是,根据 Docker Compose V3 规范中的注释,网关设置似乎并未实际使用,即不被遵守。
我已通过尝试通过桥接网络上的网关地址访问主机来确定此问题,但无法解决。但是,当未指定网关或子网属性时,Docker Compose 会分配一个网关值,您“可以”使用它来访问桥接网络上的主机。换句话说,如果您让 Docker Compose 处理子网和网关,那么它就可以工作,但如果您尝试指定它,那么根据我的观察,它不会按预期工作。 更多信息请参见:
https://docs.docker.com/compose/compose-file/compose-file-v3/#ipam