在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
相关产品推荐
相关产品推荐

