我有以下内容docker-compose.yml
file:
version: '3'
services:
frontend:
image: alpine
command: tail -f /dev/null
networks:
- shared
- default
backend:
image: alpine
command: tail -f /dev/null
networks:
- shared
- default
networks:
shared:
external: true
根据上面的文件,我创建了两个使用相同网络的项目(shared
) 和相同的服务名称 (frontend
and backend
):
docker-compose -p foo up -d
docker-compose -p bar up -d
docker的DNS是否确保docker-compose -p foo exec frontend ping backend
只解析到项目中的后端容器foo
项目反之亦然bar
?
根据https://github.com/docker/compose/issues/4645 https://github.com/docker/compose/issues/4645,这种情况下的解析顺序是不确定的。由于网络正在转换为 golang 中的无序字典,因此不会保留顺序。这意味着https://github.com/docker/libnetwork/blob/master/sandbox.go#L593 https://github.com/docker/libnetwork/blob/master/sandbox.go#L593正在查询的端点的顺序与网络的顺序不匹配。
解决方案是定义https://docs.docker.com/compose/compose-file/compose-file-v2/#priority https://docs.docker.com/compose/compose-file/compose-file-v2/#priority如果使用 docker-compose 版本 2。或者完全限定的 dns 名称为service.network
例如backend.foo_default
or backend.shared
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)