Docker Compose 主机名 DNS 查找失败

Posted

技术标签:

【中文标题】Docker Compose 主机名 DNS 查找失败【英文标题】:Docker Compose Hostname DNS Lookup Fails 【发布时间】:2019-11-09 11:17:43 【问题描述】:

我有一个简单的 Docker 撰写文件,如下所示:

version: '3'
services:
  server:
     build: ./server
     networks:
        - common
     ports:
        - "4840:4840"
     container_name: open62541_server
     hostname: open62541-server
  client:
    build: ./client
    depends_on:
       - server
    container_name: open62541_client
    networks:
        - common

networks:
    common:

当我运行它时,我得到以下错误:

Attaching to open62541_server, open62541_client
open62541_server | [2019-06-27 12:19:54.864 (UTC+0000)] info/network    TCP network layer listening on opc.tcp://open62541-server:4840/
open62541_client | [2019-06-27 12:19:55.590 (UTC+0000)] warn/network    DNS lookup of open62541-server failed with error Name or service not known
open62541_client exited with code 0

即使在指定容器属于公共网络之后,为什么会出现此错误?我有什么遗漏吗?

【问题讨论】:

【参考方案1】:

您应该使用server(服务名称)作为您在 docker-compose 网络中连接的主机,而不是 open62541-server,因为 docker 文件中的 container_name 和 hostname 部分都不会影响 docker-compose 的内部 DNS。

【讨论】:

(hostname: 基本上也完全是无操作的——它只影响容器认为自己的主机名是什么,而不影响任何其他容器或 DNS 设置。Docker Compose 还提供了一个 @ 987654324@ 网络为您服务,您应该能够成功删除所有network: 块。)【参考方案2】:

您可能在配置文件中有错字。 hostnameopen62541-servercontainer_nameopen62541_server(带下划线)。您应该能够使用服务名称(即server)或容器名称(即open62541_server)连接到服务器

【讨论】:

以上是关于Docker Compose 主机名 DNS 查找失败的主要内容,如果未能解决你的问题,请参考以下文章

使用主机 DNS 服务器的 Docker-compose 容器

Docker 1.10 通过主机名访问容器

如何为 MongoDB 和 Spring Boot 定义主机名到 docker-compose.yml

带有 django 的 Docker-compose 无法将主机名“db”转换为地址:名称或服务未知

无法使用 Postgres、Docker Compose 和 Psycopg2 将主机名“db”转换为地址

容器的DNS和主机名