Linux docker compose中的秘密

Linux docker compose中的秘密,linux,docker,docker-compose,Linux,Docker,Docker Compose,我的环境是ubuntu 18.04 VPS 我无法在docker容器中使用基于文件的机密与mariadb一起工作 创建docker compose.yml: 创造秘密: (请注意,我可以设置444,但这会暴露主机上的机密文件,这是一个非常糟糕的主意。) 运行: 错误: db_1|/usr/local/bin/docker-entrypoint.sh:第37行:/run/secrets/password_root:权限被拒绝 根据,机密文件应该以0444的形式装载,但这显然没有发生。提示点如下:

我的环境是ubuntu 18.04 VPS

我无法在docker容器中使用基于文件的机密与mariadb一起工作

  • 创建
    docker compose.yml
  • 创造秘密:
  • (请注意,我可以设置444,但这会暴露主机上的机密文件,这是一个非常糟糕的主意。)

  • 运行:
  • 错误:

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

    根据,机密文件应该以
    0444
    的形式装载,但这显然没有发生。

    提示点如下:

    chown root:root.secret_password*#将root设置为所有者
    chown 400.密码*#设置'400'为所有者
    
    chown
    替换为'chmod:

    chown root:root.secret\u密码*
    chmod 400.密码*
    
    显然是为了“docker compose”,只是为了“docker swarm”。这些文件具有误导性

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

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


    抢手货这是一个输入错误,但不幸的是,它并没有改变问题:(在错误消息中显示
    /run/secrets/db_password\u root
    ,但您的compose中没有此文件的机密。这太糟糕了,我一直在尝试让它正常工作,点击您的评论解释为什么不正常。关于在构建过程中使用docker compose和Dockerfile隐藏令牌,有什么好的建议吗?我不想要令牌通信任何人都不小心写了这封信。谢谢!@nyhunter77我想你可以使用
    .env
    文件?你会这么认为@lonix,我也是,但我在构建时需要这些值,而不是在运行时。我昨晚就想出来了。我实际上在docker文件中设置了一个默认参数,这样真实的参数就不会被提交到git中,然后当我运行docker compose时,我运行:docker composer-compose build--build arg JOB_TOKEN=这似乎适合现在的需要!一天多来一直在努力想出一个像样的解决方案。:@nyhunter77
    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
    
    echo -n secret > .secret_password_root
    echo -n secret > .secret_password_user
    chown root:root .secret_password*
    chmod 400 .secret_password*
    
    docker-compose up