[英]Secrets in docker compose
我的环境是 ubuntu 18.04 VPS。
我无法在 docker 容器中使用 mariadb 获取基于文件的机密。
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
echo -n secret > .secret_password_root
echo -n secret > .secret_password_user
chown root:root .secret_password*
chmod 400 .secret_password*
(请注意,我可以设置 444,但这会暴露主机上的机密文件,这是一个非常糟糕的主意。)
docker-compose up
错误:
db_1 | /usr/local/bin/docker-entrypoint.sh:第 37 行:/run/secrets/password_root:权限被拒绝
根据文档,秘密文件应该挂载为0444
,但这显然没有发生。
显然,“docker compose” 不支持此功能,仅适用于“docker swarm”。 文档具有误导性。
Docker Compose 不支持真实(swarmkit)机密,并通过将文件直接绑定挂载到容器中来模仿它们(这意味着主机上的权限与容器中的权限相同)。
您可以更改主机上文件的所有权以匹配容器中用户的 uid/gid,但不幸的是,我认为没有什么可以做的
自docker-compose v2.5.0以来,这现在是可能的。
Dockerfile:
# syntax=docker/dockerfile:1.2
RUN --mount=type=secret,id=mysecret,target=/root/mysecret cat /root/mysecret
docker-compose.yml
services:
my-app:
build:
context: .
secrets:
- mysecret
secrets:
mysecret:
file: ~/.npmrc
Shell:
$ docker-compose build
要点在这里:
chown root:root .secret_password* # set root as owner
chown 400 .secret_password* # set `400` as owner
将chown
替换为 `chmod:
chown root:root .secret_password*
chmod 400 .secret_password*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.