我使用17.09.0-ce docker服务和centos7.2.1511进行测试并尝试更改网络相关的系统配置但失败:
我使用一个文件来覆盖所有配置:
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_max_syn_backlog = 200000
net.core.netdev_max_backlog = 200000
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152
sysctl -p config
:
sysctl: cannot stat /proc/sys/net/ipv4/tcp_syncookies: No such file or directory
sysctl: cannot stat /proc/sys/net/ipv4/tcp_tw_recycle: No such file or directory
sysctl: cannot stat /proc/sys/net/ipv4/tcp_max_syn_backlog: No such file or directory
sysctl: cannot stat /proc/sys/net/core/netdev_max_backlog: No such file or directory
sysctl: cannot stat /proc/sys/net/core/rmem_max: No such file or directory
sysctl: cannot stat /proc/sys/net/core/wmem_max: No such file or directory
在容器中我确实没有看到这些文件,docker 是否不支持更改上述配置或者我做了错误的操作?
答案1
使用docker run --sysctl your.config.parameter
。据我记得,--sysctl
多次使用多个选项。请记住,有些 sysctl 参数无法使用 docker 设置,因为它们是全局的。
传统样式配置(写入/sys|/proc
)在容器内不起作用,除非您使用类似的方法ip netns exec ...
或其他方法进入正确的命名空间。
答案2
Docker 不是虚拟机,因此它不会像虚拟机那样提供所有架构。 docker 容器的底层基础设施是在主机系统上配置的,而不是在容器本身内配置的。
请参阅docker 概述文档和docker 网络文档更多细节。
更彻底的定制选项记录在https://docs.docker.com/engine/userguide/networking/default_network/container-communication