在Molecule创建的Docker容器中运行ufw命令报ip6tables错误如何解决
问题原因
- 核心报错触发自ufw默认对IPv6规则的初始化操作:ufw安装后默认开启IPv6支持,启动时会尝试加载ip6tables的filter表,而Docker容器默认环境缺少对应的权限和内核模块加载条件,导致初始化失败
- 已添加的
NET_ADMIN能力不足以覆盖ip6tables的操作需求,还缺少NET_RAW权限;另外即使开启了privileged模式,若容器未开启IPv6支持,ip6tables相关操作依然会失败
修复方案
方案1:禁用ufw的IPv6支持(最简方案,适配无需测试IPv6规则的场景)
在ufw初始化任务前,新增修改ufw配置的任务,关闭IPv6支持:
- name: Disable UFW IPv6 support lineinfile: path: /etc/default/ufw regexp: '^IPV6=' line: 'IPV6=no' become: true
调整原ufw任务的执行顺序,确保配置修改完成后再执行启用操作即可。
方案2:补全Molecule配置,支持IPv6规则测试
如果需要验证IPv6相关的防火墙规则,修改molecule.yaml的platforms配置:
- 补全capabilities配置,新增
NET_RAW - 开启容器IPv6支持,指定对应sysctl参数
修改后的platforms配置参考:
platforms: - name: bionic image: ubuntu:18.04 volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro privileged: true capabilities: ['NET_ADMIN', 'NET_RAW'] sysctls: net.ipv6.conf.all.disable_ipv6: 0
两种方案任选其一执行后,重新运行molecule converge即可解决报错。
内容的提问来源于stack exchange,提问作者Siyanew
相关产品推荐
相关产品推荐

