在Docker容器中获取只读文件系统错误

时间:2019-01-05 05:16:16

标签: docker centos

此命令

echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6

在CentOS泊坞窗容器中运行(在Mac上运行)时,会给出:

echo 1 | sudo tee /proc/sys/net/ipv6/conf/all/disable_ipv6
tee: /proc/sys/net/ipv6/conf/all/disable_ipv6: Read-only file system
1

在CentOS虚拟机中运行时,它成功,并且没有错误。

docker容器和VM内的目录权限完全相同:

VM:

$ ls -ld /proc/sys/net/ipv6/conf/all/disable_ipv6
-rw-r--r-- 1 root root 0 Jan  4 21:09 /proc/sys/net/ipv6/conf/all/disable_ipv6

docker:

$ ls -ld /proc/sys/net/ipv6/conf/all/disable_ipv6
-rw-r--r-- 1 root root 0 Jan  5 05:05 /proc/sys/net/ipv6/conf/all/disable_ipv6

这是一个全新的容器。

Docker版本:

$ docker --version
Docker version 18.09.0, build 4d60db4

我想念什么?

1 个答案:

答案 0 :(得分:1)

尝试使用骇人听闻的解决方案,并使用--privileged向容器添加扩展特权:

$ docker run --rm -ti centos \
  bash -c "echo 1 | tee /proc/sys/net/ipv6/conf/all/disable_ipv6"
tee: /proc/sys/net/ipv6/conf/all/disable_ipv6: Read-only file system
1

vs

$ docker run --privileged --rm -ti centos \
  bash -c "echo 1 | tee /proc/sys/net/ipv6/conf/all/disable_ipv6"
1

您可以使用--cap-add而不是--privileged添加精确特权。

然而,--sysctl似乎是最好的解决方案,而不是使用--privileged入侵容器中的网络:

$ docker run --sysctl net.ipv6.conf.all.disable_ipv6=1 \
  --rm -ti centos bash -c "cat /proc/sys/net/ipv6/conf/all/disable_ipv6"             
1