目标是使用特定的tcp_timestamp和tcp_sack标志启动容器。
此命令在ubuntu(22.05)和fedora(36)主机上按预期工作。docker run --privileged --rm -dt --name ubuntu -p 8080:80 ubuntu /bin/bash -c "sysctl -w net.ipv4.tcp_timestamps=0 && sysctl -w net.ipv4.tcp_sack=0 && sleep 15"
容器shell从fedora主机,在那里我用这个命令启动ubuntu容器。它和预期的一样工作。
root@3c7583143b0d:/# sysctl -a | grep -E "tcp_timestamps|tcp_sack"
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
root@3c7583143b0d:/#
然而在centos(7.9.2009)主机上,它对时间戳或sack都不起作用。容器立即退出并显示错误。容器外壳显示容器中没有这两个东西。
root@fa306af3eb37:/# sysctl -a | grep -i "timestamp"
net.netfilter.nf_conntrack_timestamp = 0
root@fa306af3eb37:/#
我可以将更改应用到Centos主机上的tiemstamp和sack,但不知何故,它没有暴露在容器中。
你知道为什么这只在centos主机上不起作用吗?
1条答案
按热度按时间m3eecexj1#
是的,所以在超过12个小时之后我终于能够弄清楚这个问题。行为是由于内核版本。我已经采取了最新的centos 7 iso(2022年7月)从官方网站,它安装了内核v3.10.0。开始与我的docker工作安装后,运行到这个问题。应该采取了休息早,开始与放松的心态。
最后决定将内核从3.10.0升级到最新的稳定版本6.0.2,并修复了它。