我正在使用此 docker 命令运行 db2 容器示例。参考 docker图像
docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=Notallowed1! -e DBNAME=testdb ibmcom/db2
它正在工作。如果我删除--privileged=true我会收到以下错误。
所以,--privileged=true是强制性的。
我尝试使用此命令将其作为服务添加到 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 中运行此容器?删除 --privileged 会创建服务但无用,因为我们会收到连接错误。我测试过了。
答案1
正如 mac 在回答中所说,swarm 模式仍然不支持特权模式。
但是,如果您想在 Swarm 中运行特权容器,有一个比较简单的解决方法:只需创建一个可以访问主机的 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