DOCKER 容器和主机上的运行时内核参数不一致

Posted

技术标签:

【中文标题】DOCKER 容器和主机上的运行时内核参数不一致【英文标题】:Inconsistent runtime kernel parameters in DOCKER container and on host 【发布时间】:2015-06-05 08:21:08 【问题描述】:

我的主机在 Ubuntu 14.04.2 LTS 上,我正在使用最新的 centos 基础映像来创建 IBM InfoSphere BigInsights 的 DOCKER 映像,以便将其推送到 Bluemix Container Cloud。

我几乎解决了所有问题,但我坚持使用 sysctl 设置运行时内核参数,因为它们的值错误并且安装程序会抱怨。

sysctl -a |grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000

当然不能将它们设置在 DOCKER 容器中,我收到以下错误:

sysctl -w net.ipv4.ip_local_port_range="1024 64000"
sysctl: setting key "net.ipv4.ip_local_port_range": Read-only file system

所以我已经在主机系统上设置了参数:

sudo sysctl -w net.ipv4.ip_local_port_range="1024 64000"
net.ipv4.ip_local_port_range = 1024 64000

sudo sysctl -a |grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 1024 64000

我什至重建了整个图像并重新创建了容器,但仍然在我得到的 DOCKER 容器内:

sysctl -a |grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    61000

有什么想法吗?

【问题讨论】:

[刷新 docker 容器的 net.core.somaxcomm(或任何 sysctl 属性)][1] [1]:***.com/questions/26177059/… 非常好,不幸的是我的主机系统上没有/proc/net.ipv4,但我明白你的意思,会考虑一下 但是一旦我通过 DOCKER 恕我直言设置主机的内核参数,在主机系统本身上设置它们就没有区别:( 【参考方案1】:

您需要重新加载 sysctl。尝试以下命令之一(它们取决于您的操作系统)

sudo /etc/rc.d/sysctl reload

sudo sysctl -p /etc/sysctl.conf

【讨论】:

您好,我已经在主机系统上设置了参数并从头开始构建映像,但在运行的 docker 容器中仍然有错误的参数 我更新了上面的答案,应该重新加载 sysctl。 你能粘贴运行其中一个/两个命令的错误吗? 你还有这个问题吗?

以上是关于DOCKER 容器和主机上的运行时内核参数不一致的主要内容,如果未能解决你的问题,请参考以下文章

Docker 内核名字空间

你好,我想请教下docker里的centos容器怎么改变udp缓冲区,谢谢,目前好像改不了说的文件readonly?

生产环境,测试环境中,Docker 可以做啥

为什么要用docker?

docker 学习

docker 容器修改端口