docker compose 中的秘密

lon*_*nix 4 linux docker docker-compose

我的环境是 ubuntu 18.04 VPS。

我无法获得基于文件的机密以在 docker 容器中使用 mariadb。

  1. 创建docker-compose.yml
version: '3.7'
services:
  db:
    image: mariadb:10.4.8-bionic
    environment:
      - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/password_root
      - MYSQL_PASSWORD_FILE=/run/secrets/password_user
      - MYSQL_DATABASE=database
      - MYSQL_USER=admin
    secrets:
      - password_root
      - password_user
secrets:
  password_root:
    file: .secret_password_root
  password_user:
    file: .secret_password_user
Run Code Online (Sandbox Code Playgroud)
  1. 创建秘密:
echo -n secret > .secret_password_root
echo -n secret > .secret_password_user
chown root:root .secret_password*
chmod 400 .secret_password*
Run Code Online (Sandbox Code Playgroud)

(请注意,我可以设置 444,但这会暴露主机上的机密文件,这是一个非常糟糕的主意。)

  1. 跑:
docker-compose up
Run Code Online (Sandbox Code Playgroud)

错误:

db_1 | /usr/local/bin/docker-entrypoint.sh:第 37 行:/run/secrets/password_root:权限被拒绝

根据文档,机密文件应该挂载为0444,但这显然不会发生。

lon*_*nix 7

显然这不支持“docker compose”,只支持“docker swarm”。文档具有误导性。

Docker Compose 不支持真正的(swarmkit)秘密,并通过将文件直接绑定挂载到容器中来模仿它们(这意味着主机上的权限与容器中的权限相同)。

您可以更改主机上文件的所有权以匹配容器中用户的 uid/gid,但除此之外,我认为不幸的是没有太多可以做的

  • 太糟糕了,我一直在努力让它发挥作用,点击你的评论解释了为什么它不起作用。关于在构建过程中使用 docker-compose 和 Dockerfile 隐藏令牌有什么好的建议吗?我不希望任何人意外地犯下令牌。谢谢! (2认同)