Val*_*res 7 environment-variables docker dockerfile docker-compose
我们使用此处详述的技术以安全的方式将主机环境变量公开给 Docker 构建。
# syntax=docker/dockerfile:1.2
FROM golang:1.18 AS builder
# move secrets out of the build process (and docker history)
RUN --mount=type=secret,id=github_token,dst=/app/secret_github_token,required=true,uid=10001 \
export GITHUB_TOKEN=$(cat /app/secret_github_token) && \
<nice command that uses $GITHUB_TOKEN>
Run Code Online (Sandbox Code Playgroud)
这个命令来构建图像:
# syntax=docker/dockerfile:1.2
FROM golang:1.18 AS builder
# move secrets out of the build process (and docker history)
RUN --mount=type=secret,id=github_token,dst=/app/secret_github_token,required=true,uid=10001 \
export GITHUB_TOKEN=$(cat /app/secret_github_token) && \
<nice command that uses $GITHUB_TOKEN>
Run Code Online (Sandbox Code Playgroud)
以上效果完美。
现在我们还有一个在 CI 中运行的 docker-compose 文件需要修改。但是,即使我确认该作业中存在 ENV 变量,我也不知道如何将环境变量分配给指定github_token的秘密 ID。
换句话说,可以接受具有秘密 ID 的环境变量映射的等效 docker-compose 命令(up --build 或 build)是什么?
事实证明我有点领先于时代。docker compose v.2.5.0 带来了对 Secrets 的支持。
按照上面的说明修改 Dockerfile 后,我们必须将 docker-compose 更新为已定义的secrets.
docker-compose.yml
services:
my-cool-app:
build:
context: .
secrets:
- github_user
- github_token
...
secrets:
github_user:
file: secrets_github_user
github_token:
file: secrets_github_token
Run Code Online (Sandbox Code Playgroud)
但这些文件在哪里secrets_github_user并且secrets_github_token来自哪里?在 CI 中,您还需要导出环境变量并将其保存到默认机密文件位置。在我们的项目中,我们使用任务,因此我们也添加了这些行。
请注意,我们正在从 CI 运行此任务,因此您可以在没有任务的情况下以不同的方式执行此任务。
- printenv GITHUB_USER > /root/project/secrets_github_user
- printenv GITHUB_TOKEN > /root/project/secrets_github_token
Run Code Online (Sandbox Code Playgroud)
然后我们更新 CircleCI 配置并向我们的作业添加两个环境变量:
.config.yml
- printenv GITHUB_USER > /root/project/secrets_github_user
- printenv GITHUB_TOKEN > /root/project/secrets_github_token
Run Code Online (Sandbox Code Playgroud)
您可能还需要更新的 Docker 版本,我认为他们在 19 年底或 20 年初发布了它。我已经使用过它并且它有效:
name-of-our-job:
environment:
DOCKER_BUILDKIT: 1
COMPOSE_DOCKER_CLI_BUILD: 1
Run Code Online (Sandbox Code Playgroud)
现在,当运行基于 docker-compose 的命令时,秘密应该通过 docker-compose 成功安装,并且可用于正确构建或运行 Dockerfile 指令!
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |