此命令
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
我想念什么?
答案 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