如何在 docker swarm 模式服务调用上设置 Linux 功能

vol*_*vox 6 docker docker-swarm

我正在研究在 swarm (1.12.x) 下运行的保险库的概念。

单个容器将启动: docker run -d --cap-add IPC_LOCK -p 8200:8200 -p 8215:8125 --name vault --volume /vagrant/vault:/vagrant/vault vault server -config=/path/to/vault.hcl

但是当我想在 swarm 作为服务运行它时,似乎无法指定IPC_LOCK功能,以便在这种情况下锁定 Vault 服务的加密交换。

使用docker service create命令启动群模式服务时如何设置 --cap-add 标志?

BMi*_*tch 8

从 20.10 开始,可以从以下位置docker service create获得--cap-add

$ docker service create --help
...
      --cap-add list                       Add Linux capabilities
      --cap-drop list                      Drop Linux capabilities
Run Code Online (Sandbox Code Playgroud)

或者在使用与docker stack deploy版本 2 文件相同的语法的撰写文件中:

version: "3.9"
services:
  app:
    image: your-image:tag
    cap_add:
    - CAP_NAME1
    - CAP_NAME2
    cap_drop:
    - CAP_NAME3
    - CAP_NAME4
Run Code Online (Sandbox Code Playgroud)

[20.10之前的原始答案]

它目前不受支持,但 Docker 正在研究解决方案。不--cap-add盲目包含选项背后的逻辑是在大型集群中,可能存在管理器向工作人员提交具有附加权限的容器的安全问题。工作人员可能信任无法访问主机的运行安全容器,但不希望允许通过特权容器远程根访问主机。

关于这个的讨论在 github 上结束:

https://github.com/docker/docker/pull/26849#issuecomment-252704844

https://github.com/docker/swarmkit/issues/1030

https://github.com/docker/swarmkit/pull/1722

https://github.com/moby/moby/issues/25885#issuecomment-557790402https://github.com/docker/cli/pull/2199


小智 8

这里的所有其他答案都是旧的。Docker 20.10.0 和更新版本现在支持通过docker service命令行Docker Stack YAML 文件格式为 Swarm 服务指定功能。

在命令行上,您只需指定--cap-add [capability]or --cap-drop [capability]

这是在 Docker Stack YAML 文件中添加功能的示例:

version: "3.9"
services:
  your-service:
    cap_add:
      - CAP_SYS_ADMIN
Run Code Online (Sandbox Code Playgroud)

  • 主要拉取请求确认了此信息 https://github.com/docker/cli/pull/2687 但不幸的是,官方的 docker-compose 文件参考尚未记录此改进,并且仍然表示不支持 cap_add 和 cap_drop群模式。 (2认同)