之前我们在 容器互联 那一节里重点说到过 如何通过
共享同一个第三容器的 网络,
来使用localhost访问其他容器的endpoint,其主要原理是 Linux network 的 namespace
然而这个问题到了 docker compose 中又不一样了
通过以下脚本启动两个容器,并且配置它们共享一个名为 unetwork的网络
version: '3'
services:
utest1:
image: nginx
networks:
- unetwork
utest2:
image: ubuntu
command: sleep infinity
networks:
- unetwork
networks:
unetwork:
driver: bridge
ipam:
config:
- subnet: 192.168.100.0/24
可以看到
- 容器无法通过localhost访问,也就是说它们没有共享一个network namespace
- 检查 /etc/hosts 发现其中也没有像 link 那样把container name 写进 dns
- curl utest1:80 访问到了 nginx
docker compose 可以使用的网络多种多样
具体请参考
https://docs.docker.com/engine/reference/commandline/network_create/
如果没有特殊指定的话,这里生成的是 bridge 模式