多个项目使用同一网络的 Docker DNS

2024-03-08

我有以下内容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(使用前将#替换为@)

多个项目使用同一网络的 Docker DNS 的相关文章

随机推荐