Ошибка чтения файловой системы только для чтения внутри контейнера докера - PullRequest
0 голосов
/ 05 января 2019

Эта команда

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:

$ 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

докер:

$ 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 голосов
/ 05 января 2019

Попробуйте взломать решение и добавьте расширенные привилегии для контейнера с помощью --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

против

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...