容器 RHEL 6.6 中的 Docker 不可能设置 sysctl 参数

Posted

技术标签:

【中文标题】容器 RHEL 6.6 中的 Docker 不可能设置 sysctl 参数【英文标题】:Docker impossible setup sysctl parameter in container RHEL 6.6 【发布时间】:2017-10-16 07:56:47 【问题描述】:

我创建了 RHEL 6.6 的映像(来自 registry.access.redhat.com/rhel6.6),但是当我运行容器时:

docker run --privileged --rm -h "DAN" --net net_custom --ip 200.0.2.3 -t -i test_beta_4 bash

我尝试在 sysctl.conf 中加载一些参数,它返回以下错误:

error: "net.core.rmem_default" is an unknown key
error: "net.core.wmem_default" is an unknown key
error: "net.core.rmem_max" is an unknown key
error: "net.core.wmem_max" is an unknown key

我在 /proc/sys/net/core/ 下检查,发现这些文件丢失了。 那么如何更改这些网络内核设置? 我在我的 Mac 上运行 docker。 谢谢

【问题讨论】:

你有没有尝试过类似的,在这个文档中docs.docker.com/engine/reference/commandline/run/…docker run --sysctl net.ipv4.ip_forward=1 someimage 是的,我确实尝试过,但这是输出:docker:来自守护进程的错误响应:oci 运行时错误:container_linux.go:247:启动容器进程导致“process_linux.go:359:容器初始化导致\"打开 /proc/sys/net/core/rmem_default: 没有这样的文件或目录\"". 【参考方案1】:

同样的问题出现在这个特定的 github 问题上:https://github.com/moby/moby/issues/30778

似乎这些 net.core 参数不是内核能够放入命名空间的东西。出现错误消息是因为 docker 正在尝试设置这些,但在内核中拒绝了它。

在撰写本文时,该问题目前处于活跃状态,看起来 docker 开发人员将在内核团队中循环。

作为一种解决方法,您似乎应该能够在您的主机上全局设置这些设置,然后应该扩展到您的所有容器。

【讨论】:

没有解决方法......这是一个很大的限制,因为我不能像我应该做的那样在不同的平台上运行我的容器。 您是否尝试在主机上全局设置选项? 嗨,对不起,这是什么意思? 与其尝试将其设置在容器内,不如将其设置在主机上。一旦在主机上设置,因为它是一个全局选项,它应该适用于主机和所有容器。由于 linux 内核似乎不支持此选项的名称间距,因此将其设置为主机范围将是唯一的可能性。 问题是我在 Mac 上运行 docker,我无法设置这些参数。我应该尝试使用 rhel,但如果我想在不同的平台上导出我的项目,我将再次面临同样的问题。

以上是关于容器 RHEL 6.6 中的 Docker 不可能设置 sysctl 参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Centos 6.6 docker 容器中安装厨师服务器

安装redhat 6.6

运维实操——docker容器镜像大小优化

RHEL 6.6下Python 2.6.6升级到Python 3.6.6

Docker容器简用

与任何其他主机操作系统相比,CentOS 作为 Docker 主机会导致不同的容器行为