Linux docker compose中的秘密
我的环境是ubuntu 18.04 VPS 我无法在docker容器中使用基于文件的机密与mariadb一起工作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的形式装载,但这显然没有发生。提示点如下:
docker compose.yml
: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