如何在docker swarm中设置特权?

如何在docker swarm中设置特权?

我正在使用此 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

答案2

创建服务意味着你以 Swarm 模式运行容器。请参阅服务如何运作在 Docker 文档中提到过。

不幸的是特权模式在 Swarm 模式下不起作用。正如你看这里运行时 --privileged 选项不可用docker service create

相关内容