You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在docker:latest镜像中运行Docker时出现DNS解析错误求助

问题分析:Docker容器内调用Docker API时DNS解析失败

问题场景

在docker:latest镜像内部运行Docker命令时,遇到DNS解析错误,无法定位docker主机,核心报错如下:

error during connect: Post "http://docker:2375/v1.45/volumes/create": dial tcp: lookup docker on 1.1.1.1:53: no such host

运行输出

# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.

nameserver 172.25.8.1
nameserver 1.1.1.1
nameserver 1.1.1.1
nameserver 1.1.1.1

# Based on host file: '/etc/resolv.conf' (legacy)
# Overrides: []
...creating volumes: marquez_data, marquez_db-conf, marquez_db-init, marquez_db-backup
error during connect: Post "http://docker:2375/v1.45/volumes/create": dial tcp: lookup docker on 1.1.1.1:53: no such host
error during connect: Post "http://docker:2375/v1.45/volumes/create": dial tcp: lookup docker on 1.1.1.1:53: no such host
error during connect: Post "http://docker:2375/v1.45/volumes/create": dial tcp: lookup docker on 1.1.1.1:53: no such host
error during connect: Post "http://docker:2375/v1.45/volumes/create": dial tcp: lookup docker on 1.1.1.1:53: no such host

Dockerfile内容

# Use a Linux image
FROM docker:latest

# Install Docker
RUN apk update

# Install bash
RUN apk add bash

# Install git
RUN apk add --update git

# Clone the Marquez repository
WORKDIR /app
RUN git clone --depth=1 https://github.com/MarquezProject/marquez.git

# Execute the startup script to launch Marquez
CMD ["/bin/bash", "-c", "cat /etc/resolv.conf && cd marquez && ./docker/up.sh"]

# Expose Marquez's web UI port (optional, adjust based on use case)
EXPOSE 3000

问题原因分析

  • 公共DNS无法解析内部主机名:容器内优先使用的1.1.1.1是公共DNS服务器,没有docker这个内部主机名的映射记录,自然无法解析。虽然配置了内网DNS(172.25.8.1),但重复的公共DNS条目可能抢占了解析优先级。
  • 缺少docker主机名到宿主机的映射:docker通常是用来指向宿主机Docker daemon的别名,但默认情况下Docker不会自动将这个别名添加到容器的/etc/hosts中,导致容器无法通过该主机名找到宿主机服务。
  • 容器网络未关联宿主机:如果容器没有使用host网络模式,也未手动配置主机映射,就无法通过内部主机名解析到宿主机的Docker服务。

解决方向

  • 添加主机映射:启动容器时加上--add-host docker:host-gateway参数(Docker 20.10+支持),自动将docker主机名映射到宿主机网关IP。
  • 挂载Docker Socket:启动容器时挂载宿主机的Docker socket,命令示例:-v /var/run/docker.sock:/var/run/docker.sock。容器内的Docker客户端可直接与宿主机daemon通信,绕开DNS解析环节。
  • 调整DNS优先级:修改容器DNS配置,让内网DNS(172.25.8.1)优先生效,或手动在容器/etc/hosts中添加映射:echo "宿主机IP docker" >> /etc/hosts。

内容的提问来源于stack exchange,提问作者Sergi Garriga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:33:40