【问题标题】:domain configuration in docker-composedocker-compose 中的域配置
【发布时间】:2018-04-19 05:29:32
【问题描述】:

如何使用docker-compose.yml 中的域配置主机名?

假设服务worker 期望http://web.local/ 地址上的服务web。但是无论我使用hostname 指令配置什么,web.local 都不会解析为 IP 地址。添加extra_hosts 指令也不起作用,因为我应该知道web 服务的IP,因为它是由docker 分配的。

docker-compose.yml:

version: '3'
services:
  worker:
    build: ./worker
    networks:
      - mynet    
  web:
    build: ./web
    ports:
      - 80:80
    hostname: web.local
    networks:
      - mynet
networks:
  mynet:

ping web.local 无法在服务worker 内部解析

【问题讨论】:

  • 您是在尝试从“worker”容器还是从主机 ping “web.local”?
  • 我想从我的工人那里 ping 它。 (更具体地说,我想从我的工作人员发出 http 请求,但它在 ip 解析时失败。)

标签: docker dns docker-compose


【解决方案1】:

为此,您需要在网络mynet 中添加一个alias

来自official 文档:

此服务在网络上的别名(替代主机名)。其他 同一网络上的容器可以使用服务名称或 this 别名以连接到服务的容器之一。

所以,您的docker-compose.yml 文件应该如下所示:

version: '3'
services:
  worker:
    build: ./worker
    networks:
      - mynet  
  web:
    build: ./web
    ports:
      - 80:80
    hostname: web.local
    networks:
       mynet:    
          aliases:
            - web.local
networks:
  mynet:

【讨论】:

  • 嗨,我有一个 PostgreSQL 容器和一个 Web 服务器。根据这个例子,我的数据库是web 这里我的服务器是worker ?
  • @SleebaPaul 你能给我更多细节吗?或创建一个包含所有详细信息的新问题,我会回答它
  • 好的,我有一个 PostgreSQL 容器和一个 Swift 服务器容器。我需要将 db ip 传递给服务器以启动它。所以我在我的自定义桥接网络中为 db 创建了一个别名。但是当我这样做时,错误显示,message: "could not translate host name \"mynetworkdb\" to address: Temporary failure in name resolution\n"
  • @SleebaPaul 给我你的docker-compose.yml 文件
  • 我添加了一个问题。在这里找到它。 stackoverflow.com/questions/54324599/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
  • 2016-02-02
  • 2022-06-27
  • 1970-01-01
  • 2022-11-11
  • 2019-08-17
相关资源
最近更新 更多