gpt4 book ai didi

docker - 主机名未在docker compose中设置

转载 作者:行者123 更新时间:2023-12-02 18:24:16 26 4
gpt4 key购买 nike

我创建了简单的compose配置来尝试Postgres BDR复制。
我希望容器将主机名作为我定义的服务名称,并且我希望一个容器能够解析并使用此主机名访问另一个容器。我希望这是真的,因为:
https://docs.docker.com/compose/networking/

我的配置:

version: '2'

services:
bdr1:
image: bdr
volumes:
- /var/lib/postgresql/data1:/var/lib/postgresql/data
ports:
- "5001:5432"
bdr2:
image: bdr
volumes:
- /var/lib/postgresql/data2:/var/lib/postgresql/data
ports:
- "5002:5432"

但实际上,这两个容器都具有垃圾主机名,并且容器名称无法访问它们:
Creating network "bdr_default" with the default driver
Creating bdr_bdr1_1
Creating bdr_bdr2_1
Attaching to bdr_bdr1_1, bdr_bdr2_1
bdr1_1 | Hostname: 938e0585fee2
bdr2_1 | Hostname: 7153165f4d5b

是一个错误,还是我做错了什么?
我使用Ubuntu 14.04.4 LTS,Docker版本1.10.1,内部版本9e83765,docker-compose版本1.6.0,内部版本d99cad6

最佳答案

docker-compose提供了向上或向下扩展服务的选项,这意味着您可以启动同一服务的多个实例。这至少是主机名不只是服务名的原因之一。您会注意到,如果将bdr1缩放到2个实例,则将具有bdr_bdr1_1和bdr_bdr1_2容器。

您可以通过至少两种方式在由docker-compose启动的容器内解决此问题:

  • 如果服务引用其他服务,则可以使用links部分,例如,使bdr1链接到bdr2。在这种情况下,当您位于bdr1内部时,可以按名称调用主机bdr2。在这种情况下,我没有尝试在放大bdr2时会发生什么。
  • 您可以使用hostname部分在内部将容器的主机名强制为所需的名称。例如,如果将hostname: bdr1添加到bdr1,则可以在内部连接到本身的bdr1。

  • 您可以使用 networks部分获得类似的结果,但是我自己尚未使用它,所以我不确定。

    关于docker - 主机名未在docker compose中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35642956/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com