我在 AWS 上运行了一个 Docker 容器(来自 sonarqube 映像),但无法远程访问。我只能通过 ssh 进行访问。
为了解决我的问题,我需要运行以下命令:
$ sysctl net.ipv4.ip_forward=1
问题是几分钟后(或发生某些事件后),此标志会恢复为 net.ipv4.ip_forward=0。某些程序会自动在此文件中添加一行:
#-> grep net.ipv4.ip_forward /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.ip_forward = 0
有人知道是什么原因吗?也许是 AWS 上的某些配置?
答案1
您是否检查过 tuned 并确认此 tuned 是否会覆盖您的 systemctl 设置?我在几台机器上都遇到过这种情况,并且 swappiness
答案2
当你运行时:
sysctl net.ipv4.ip_forward=1
更改不会被保存,它们会暂时写入 /proc,如果您重新启动网络,它们将会丢失。您必须/etc/sysctl.conf
直接编辑,删除该net.ipv4.ip_forward = 0
行,保留该net.ipv4.ip_forward = 1
行,然后运行:
sysctl -p
其他可能的原因:
- 你有
IPForward=no
吗/etc/systemd/network/50-containers.network
? - 你有
ip_forward=0
吗/etc/sysctl.d/ip_forward.conf
? - 您是否使用了 EBS 支持的 EC2 映像?如果没有,则重启后不会保留根设备
- 此 EC2 实例是否由 ELB 启动?ELB 可能随时决定终止并启动新实例,因此未保存到磁盘的 /proc 更改将会丢失。