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

尝试白名单DOCKER-USER端口致容器DNS解析失败求助

解决容器DNS解析失败+iptables规则持久化问题

问题根源

你当前的REJECT规则会拦截所有从ens3接口进入的非80/443端口流量,但容器发起DNS请求后,DNS服务器的响应是从ens3接口进来的,目标端口是主机随机分配的临时端口(不是80/443),所以被规则直接拒绝,导致解析失败。

修正后的iptables规则

在REJECT规则之前,先允许已建立/关联的连接流量(这类流量是容器发起请求后的响应,包括DNS响应),这样既能限制公网入站的新连接仅允许80/443,又不影响容器的出站请求响应:

sudo iptables -F DOCKER-USER
# 允许已建立/关联的连接(比如DNS响应、HTTP请求的返回包等)
sudo iptables -I DOCKER-USER -i ens3 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 允许公网入站的80/443端口新连接
sudo iptables -I DOCKER-USER -i ens3 -p tcp -m multiport --dports 80,443 -j ACCEPT
# 拒绝其余从公网入站的TCP/UDP新连接
sudo iptables -A DOCKER-USER -i ens3 -p tcp -j REJECT --reject-with tcp-reset
sudo iptables -A DOCKER-USER -i ens3 -p udp -j REJECT --reject-with icmp-port-unreachable

测试验证:

docker run busybox nslookup google.com # 现在应该正常工作

iptables规则持久化方法

根据不同发行版,常用两种方式:

Debian/Ubuntu系列

  • 安装持久化工具:
sudo apt update && sudo apt install -y iptables-persistent
  • 保存当前规则:
sudo netfilter-persistent save

后续修改规则后,再次执行netfilter-persistent save即可更新,重启系统规则会自动加载。

CentOS/RHEL系列

  • 保存规则到系统配置文件:
sudo iptables-save > /etc/sysconfig/iptables
  • 确保iptables服务开机自启:
sudo systemctl enable --now iptables

修改规则后重新执行iptables-save覆盖文件即可,重启系统规则自动恢复。

内容的提问来源于stack exchange,提问作者Thomas Ramé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:46:15