Sat*_*eni 4 docker docker-secrets
我将 docker 置于群模式并执行以下操作
echo "'admin'" | docker secret create password -
docker service create \
--network="host" \
--secret source=password,target=password \
-e PASSWORD='/run/secrets/password' \
<image>
Run Code Online (Sandbox Code Playgroud)
我无法通过 docker 服务传递通过环境变量创建的密码秘密。
请帮我找出我哪里出错了
问候 Satyanvesh
这里没有标准。
Docker 文档不鼓励使用环境变量,但是无论是在“环境”部分中直接将密码设置为字符串还是在容器内使用环境变量的其他用法,都存在混淆。当同一值可能在多个服务中使用时,使用字符串而不是秘密需要在多个位置检查和更改它,而不是一个秘密值。
某些图像(例如 mariadb)使用带有 _FILE 后缀的环境变量来使用秘密文件内容填充变量的无后缀版本。这似乎没问题。
使用 Docker 不应仅仅为了支持文件中的机密而需要重新设计应用程序架构。大多数其他编排工具(例如 Kubernetes)都支持将机密直接放入环境变量中。如今,这已不被视为不好的做法。Docker Swarm 缺乏将秘密传递给环境变量的良好实践和正确示例。
恕我直言,最好的方法是使用入口点作为“装饰器”来从秘密中准备环境。
正确的入口点脚本可以编写为几乎通用的处理秘密的方式,因为我们可以将原始图像入口点作为参数传递给新的入口点脚本,因此原始图像“装饰器”在我们用脚本准备容器后正在做自己的工作。
就我个人而言,我使用以下入口点以及包含以下内容的图像/bin/sh:
https: //github.com/DevilaN/docker-entrypoint-example
您误解了 docker secret 的概念。创建秘密的重点是避免将敏感信息放入环境变量中。
在您的示例中,PASSWORD环境变量将只携带/run/secrets/password文件名而不是密码的值admin。
docker secrets 的一个有效用法是,您的 docker-image 从该文件中读取密码。查看此处的文档,尤其是有关 MySQL 的示例:
环境变量 MYSQL_PASSWORD_FILE 和 MYSQL_ROOT_PASSWORD_FILE 指向文件 /run/secrets/mysql_password 和 /run/secrets/mysql_root_password。mysql 映像在第一次初始化系统数据库时从这些文件中读取密码字符串。
简而言之:您的 docker 镜像应该读取文件的内容 /run/secrets/password
| 归档时间: |
|
| 查看次数: |
9367 次 |
| 最近记录: |