如何通过dockerfile挂载传递秘密?

问题描述 投票:0回答:1

我无法运行 dockerbuild 来安装要传递给容器的秘密。 这是一个公共存储库示例,用于显示 github 中的问题: https://github.com/inspiraller/docker-node-get-secrets

Dockerfile

FROM node:20
WORKDIR /usr/src/app
COPY node-files .
RUN npm ci && npm run build
ENV NODE_ENV=production
RUN --mount=type=secret,id=THEPASSWORD1   #,target=./run/secrets/THEPASSWORD1
CMD ["node", "dist/get-secrets.js"]

我尝试遵循 docker 主网站上的指南:https://docs.docker.com/build/building/secrets/

目的是将我的本地文件 ./.secrets/THEPASSWORD1 (包含该值)传递到 /run/secrets/THEPASSWORD1

  1. docker build -t distroless-node-dumbinit:1 --secret id=THEPASSWORD1,src=./.secrets/THEPASSWORD1 --secret id=THEPASSWORD2,src=./.secrets/THEPASSWORD2 --no-cache .

当我运行这个容器时:

docker run --name distroless-node-dumbinit distroless-node-dumbinit:1
没效果

虽然当我使用 docker-compose.yml 时,使用不同的方法确实有效。

我期待 console.log 在我的 get-secrets.js 节点文件中记录 THEPASSWORD1 的值。它期望从 /run/secrets/THEPASSWORD1

获取秘密
node.js docker docker-secrets
1个回答
0
投票

对于有此问题的其他人。这是一个将秘密传递到图像单行的工作示例。笔记。通常你不会这样做,但这只是为了展示它的工作原理。

Dockerfile

FROM debian:stable-slim
COPY private-install-script.sh .
# ACCESS_TOKEN is only available here and cannot be accessed via the history
RUN --mount=type=secret,id=ACCESS_TOKEN ENV_ACCESS_TOKEN=$(cat /run/secrets/ACCESS_TOKEN) ./private-install-script.sh

# private-install-script.sh is going to output that token back to a file /tmp/dontdothis
RUN ./private-install-script.sh

# display the contents of /tmp/dontdothis
CMD ["cat", "/tmp/dontdothis"]

私人安装脚本.sh

#!/bin/sh

# ON BUILD
echo "ENV_ACCESS_TOKEN=${ENV_ACCESS_TOKEN}. cat run/secrets/ACCESS_TOKEN=$(cat /run/secrets/ACCESS_TOKEN)" > /tmp/dontdothis

通过终端创建秘密 导出 ACCESS_TOKEN=mysupersecret123

创建构建(将使用上面创建的secert)

docker build --secret "id=ACCESS_TOKEN" -t build-secret:1 .

运行构建

docker run --name build-secret build-secret:1

我的超级秘密123

证明秘密无法通过构建访问

  1. docker 镜像历史构建秘密:1 --no-trunc
© www.soinside.com 2019 - 2024. All rights reserved.