Docker容器内无法访问命名Postgres服务器问题求助
解决Docker容器无法解析Postgres服务器名称的问题
你遇到的核心问题是容器内的DNS解析无法识别宿主机能正常解析的ServerName,下面给你几个实用的解决方案,按操作复杂度排序:
方法1:启动容器时添加自定义host映射(最直接,适合IP固定的场景)
既然你已经知道Postgres服务器的固定IP是10.1.1.25,可以在启动容器时直接把ServerName和IP的映射写入容器的/etc/hosts文件,用--add-host参数:
docker run --add-host ServerName:10.1.1.25 [你的其他启动参数] imageName
如果容器已经在运行,你也可以临时进入容器手动添加(但容器重启后会失效):
winpty docker exec -it containerName bash echo "10.1.1.25 ServerName" >> /etc/hosts
方法2:让容器使用宿主机的DNS服务器
容器默认使用Docker内置的DNS服务,所以无法识别宿主机本地的DNS解析记录。你可以在启动容器时指定使用宿主机的DNS服务器——先在宿主机上查自己的DNS地址(Windows可以用ipconfig /all找到DNS服务器地址),然后用--dns参数:
docker run --dns 宿主机DNS地址 [你的其他启动参数] imageName
比如如果宿主机的DNS是192.168.1.1,就写成:
docker run --dns 192.168.1.1 [其他参数] imageName
这样容器会直接用宿主机的DNS来解析ServerName,和宿主机的解析行为保持一致。
为什么你之前的参数没起作用?
--net=host:在Windows的Docker Desktop环境下,这个参数的支持有限,不像Linux那样完全共享宿主机的网络命名空间,所以可能没生效;-p ServerName:5432:5432:这个是端口映射参数,只能把宿主机的端口映射到容器,和DNS解析完全无关,所以对解决名称解析问题没用。
内容的提问来源于stack exchange,提问作者J.Warren
相关产品推荐
相关产品推荐

