为什么 docker-compose 允许不同 project 的 service name 重名? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
kyonn
V2EX    程序员

为什么 docker-compose 允许不同 project 的 service name 重名?

  •  
  •   kyonn 2025 年 7 月 16 日 2212 次点击
    这是一个创建于 198 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题. 容器之间可以通过 service name 通信,依赖于 容器启动时自动注册了 service name 为条目的 dns 记录. 那么为什么 允许不同项目的 service name 相同呢?

    相同自定义网络下, 通过 container name 也是可以通信的, nslookup 也能查到 dns 记录, 是否使用 container name 作为通信主机名更好? 毕竟 container name 不允许重复?

    如果是 k8s 编排容器, 一般是使用什么作为主机名通信?

    14 条回复    2025-07-18 09:35:32 +08:00
    importmeta
        1
    importmeta  
       2025 年 7 月 16 日
    我自己会手动加一个 container_name:
    julyclyde
        2
    julyclyde  
       2025 年 7 月 16 日
    dns 127.0.0.11 应该是一个假服务器吧,per service 的
    coosir
        3
    coosir  
       2025 年 7 月 16 日
    因为实际的容器名会是两者组合 projectName_serviceName ,不存在实际的重复
    ByteCat
        4
    ByteCat  
       2025 年 7 月 16 日
    只有 compose 内部网络可以通过 service name 访问,实际上的容器名会加上 project name ,而且默认并不在一个网络底下,完全没有影响
    kyonn
        5
    kyonn  
    OP
       2025 年 7 月 17 日 via Android
    @coosir
    @ByteCat
    会加 project name 我知道。我疑问是既然用 service name 作为其中一种 dns 解析,为什么不限制唯一性。
    是不是用 container name 作为主机名去通信更合理一些? docker 是两种都提供了,而且 depends on 这些配置依赖的又是 service name ,不是 container name ,不太理解这个设计初衷。
    huihuimoe
        6
    huihuimoe  
       2025 年 7 月 17 日 via iPhone
    @kyonn 因为当初的设计,docker compose 设计是部署在 docker swarm 上的,都默认 service 不会只有一个 instance ,数量是可以 scale 的
    twofox
        7
    twofox  
       2025 年 7 月 17 日
    @kyonn 楼上不是说了吗,不同的 compose 是不同的网络,网络内部就是唯一的。为什么要额外添加心智负担?
    kyonn
        8
    kyonn  
    OP
       2025 年 7 月 17 日
    @huihuimoe 复数个同名的 service 作用是? 引用某个 service, 这个 service 部署了好几个实例, 根据 dns 解析自动负载均衡?
    kyonn
        9
    kyonn  
    OP
       2025 年 7 月 17 日
    @twofox 一般不会每个容器独占一个网络. 大部分容器可能都在一个网络下, 不同容器都可能用了某个数据库容器, 这时候如果出现 servcie 同名就比较奇怪, 根据我的试验, 也能正确连接到复数个 db 中正确的那个, 其他的 db 实例上会出现鉴权错误的问题.
    julyclyde
        10
    julyclyde  
       2025 年 7 月 17 日
    @huihuimoe compose 和 swarm 是两个相互独立的项目吧?
    COW
        11
    COW  
       2025 年 7 月 17 日
    因为 docker compose 本来就更适合于单机场景,通常一个 compose 文件一个网段,此时 service_name 是唯一的,不存在冲突。

    ```bash
    networks:
    net:
    driver: bridge
    external: false
    ipam:
    config:
    - subnet: 172.19.0.0/24
    ...
    ...
    ```

    如果你不指定 container_name ,通常会加上 project_name 前缀,和 index 后缀,swarm 也类似,用户完全不需要关心 container_name ,swarm 随机生成。

    至于为什么不建议指定 container_name ,主要是不利于 scale ,非常不灵活。话说回来,有 scale 需求的,一般都上 K8s 了。
    kyonn
        12
    kyonn  
    OP
       2025 年 7 月 17 日
    @COW 一般怎么个 scale 形式呢? 能否举个例子. 用同名 service name 相互代替? 还是负载均衡?
    COW
        13
    COW  
       2025 年 7 月 17 日
    @kyonn #12 负载均衡,不过通常很少直接在 compose 里用 scale ,会集成 swarm 或者用 k8s 来实现
    kyonn
        14
    kyonn  
    OP
       2025 年 7 月 18 日
    @COW 了解了, 多谢.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1522 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 00:45 PVG 08:45 LAX 16:45 JFK 19:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86