我使用 docker compose 在服务器上部署应用程序(前端/后端),并在 compose 文件中定义了两个网络,一个用于后端,一个用于前端。 这是我的问题哪个更好:
具有指定网络配置的:
...
networks:
frontend:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
backend:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/16
...
或者不指定网络配置:
...
networks:
frontend:
backend:
...
我不希望任何一个容器有静态IP,我只是使用容器/服务的名称在容器之间进行通信。
解释哪一个更好。
您几乎不应该指定您显示的 IP 配置。 Docker 可以自动分配它,并且无法从 Docker 外部访问 IP 地址;你没有理由知道它们,如果你明确设置它们,你就不能使用它们。
对于几乎所有在 Compose 中运行的应用程序,您根本不需要设置
networks:
。 Compose 会自动为您创建一个名为 default
的网络,如果容器不包含 networks:
块,则会自动为其分配 networks: [default]
。对于以 Compose 为正确管理工具的任何情况(您可能只有不到十几个容器,所有容器都作为单个组合应用程序的一部分),单一共享网络就足够了。
唯一的例外是,如果您的主机网络环境也使用 Docker 喜欢使用的 172.16.0.0/12 中的相同保留网络。如果您的主机系统类似于 172.18.12.34/16,并且 Docker 希望在 172.18.0.0/16 上自动创建自己的网络,那么在这种情况下,您可能需要手动为
default
分配一个不冲突的 CIDR 块
网络
networks:
default:
ipam:
config:
- subnet: 172.19.0.0/16
Docker 文档中的Compose 中的网络提供了有关 Compose 知道如何自行设置以及配置
default
网络的更多信息。