Я запускаю пример контейнера db2 с помощью этой команды docker. Ссылка на докер изображение
docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=Notallowed1! -e DBNAME=testdb ibmcom/db2
Работает. Если я удалю--привилегированный = истина , я получу ошибку ниже.
Таким образом,--привилегированный=истина является обязательным.
Я попытался добавить это в docker swarm как службу с помощью этой команды.
docker service create --name db2luw_1 --privileged=true -p target=50000 -e LICENSE=accept -e 'DB2INST1_PASSWORD=Notallowed1!' -e DBNAME=testdb -d ibmcom/db2
Но получаю эту ошибку.
unknown flag: --privileged
See 'docker service create --help'.
Как запустить этот контейнер в Docker Swarm? Удаление привилегированного --создает службу, но бесполезно, так как мы получим ошибку подключения. Я проверил это.
Создание службы означает, что вы запускаете свои контейнеры в режиме роя. См. Как работают сервисы в документации Docker.
К сожалению, привилегированный режим не работает в режиме роя. Как вы видите здесь привилегированная опция --недоступна при запускеdocker service create
Как уже было сказано в ответе mac, режим роя по-прежнему не поддерживает привилегированный режим.
Если вы хотите запустить привилегированные контейнеры в рое сегодня, есть хитрый обходной путь: просто создайте промежуточную службу, которая имеет доступ к сокету docker хоста, а затем запустите привилегированный контейнер оттуда.
Должно сработать что-то вроде следующего:
docker service create \
--name mydb2-wrapper \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock,ro \
docker \
docker run --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=Notallowed1! -e DBNAME=testdb ibmcom/db2