Ubuntu服务器Docker构建时TLS证书altnames不匹配错误如何解决
问题根因
你遇到的错误核心是Docker容器内发出的所有HTTPS请求,都被劫持返回了服务器上abc.xyz域名的SSL证书,导致第三方域名的证书校验不通过。由于宿主机执行同类操作正常,问题范围锁定在Docker网络相关的配置错误。
排查步骤
- 验证容器内DNS解析是否异常:启动一个临时测试容器执行
docker run --rm busybox nslookup registry.npmjs.org,对比宿主机执行nslookup registry.npmjs.org的返回IP。如果容器内返回的是你服务器自身的IP,说明Docker环境的DNS被篡改,或者流量被强制转发到本地。 - 检查iptables NAT规则:执行
sudo iptables -t nat -L -n,查看是否存在误配置的规则,将Docker子网/ docker0网卡的443端口流量,DNAT转发到了本地Tomcat监听的443端口。多数此类问题都是配置本地HTTPS反向代理、透明代理时,未排除Docker子网导致的。 - 检查Docker daemon代理配置:查看
/etc/systemd/system/docker.service.d/http-proxy.conf是否存在错误的HTTPS代理配置,指向了本地服务。 - 检查ufw转发规则:执行
sudo ufw status确认是否有规则强制将Docker的出站443流量转发到本地。
解决方案
- 若为iptables规则错误:删除对应的误配置DNAT规则,匹配到Docker子网转发443到本地的规则后,执行
sudo iptables -t nat -D 规则链 规则序号删除,之后保存iptables规则避免重启失效。 - 若为Docker代理配置错误:删除
http-proxy.conf中的错误配置,执行sudo systemctl daemon-reload && sudo systemctl restart docker重启Docker服务生效。 - 临时验证方案:构建镜像时添加
--network host参数使用宿主机网络构建,如果可以正常拉取依赖,即可100%确认是Docker默认网桥的网络配置问题。
内容的提问来源于stack exchange,提问作者Lewis Tran
相关产品推荐
相关产品推荐

