如何保护 docker stack 中 CIFS 卷的凭据 - 秘密?

Mar*_*ark 5 cifs docker docker-compose docker-swarm docker-secrets

是否可以使用机密来存储用户名和密码,以便在堆栈 yaml 文件中的卷定义中使用?

如果是这样,怎么办?

如果不是,那么如何最好不必在 yaml 文件中包含凭据?

例如,我的堆栈包含如下部分......

networks:
  media-net:
    driver: overlay
    ipam:
      config:
        - subnet: 172.31.1.0/24

secrets:
  smb-user:
    external: true
    name: docker-smb-user
  smb-password:
    external: true
    name: docker-smb-password
...
volumes:
  media-movies:
    name: media-movies
    driver: local
    driver_opts:
      type: cifs
      device: "//storage.lan/media-movies"
      o: "addr=storage.lan,vers=3.0,username=/run/secrets/smb-user,password=/run/secrets/smb-password,uid=1000,gid=1000"

Run Code Online (Sandbox Code Playgroud)

我尝试在选项行中使用 /run/secrets/smb-user 等,但收到一个可能相关或不相关的错误。类似“没有到主机的路由”之类的东西。

我这里是否同时存在网络和凭据问题?覆盖层可以看到主机所在的 LAN 还是需要单独的定义?

我特别只使用 yaml 文件,因此所有定义都可以在 git 存储库中维护。

Xee*_*vis -1

不需要秘密。这是一个命名卷,这意味着一旦创建它,​​它将持续存在,直到所有使用它的容器被删除并且卷被手动删除为止。

如果您希望此信息保密,只需将其从 docker-compose 中完全省略并使用以下命令手动创建一次:

docker volume create `
   --driver local `
   --opt type=cifs `
   --opt device=//storage.lan/media-movies `
   --opt o=addr=storage.lan,vers=3.0,username=foo,password=bar,uid=1000,gid=1000 `
   media-movies
Run Code Online (Sandbox Code Playgroud)

您可能希望将其添加到自述文件中以供将来参考(当然需要空白凭据)。然后您就不需要 docker-compose 文件中的任何卷详细信息。

volumes:
  media-movies:
Run Code Online (Sandbox Code Playgroud)