docker - 是否可以使用 Dockerfile 和环境变量的外部文件构建容器?
问题描述
我有一个简单的 Dockerfile,用于使用命令行构建 docker 映像。我需要从外部文件加载环境变量,而不是将它们写入同一个 Dockerfile。可能吗?我知道使用 docker composer 您可以使用 env-file 参数,但我不使用 docker composer。
构建命令
sudo docker build -t some/image -f Dockerfile .
Dockerfile
FROM golang:alpine
RUN mkdir -p /app
WORKDIR /app
ADD main /app/
ENV X="Y"
RUN ["chmod", "+x", "/app/main"]
ENTRYPOINT ["/app/main"]
EXPOSE 80 443 8080
解决方案
您可以使用名为“--secret”的新标志。
它允许挂载秘密来构建您的图像。这些秘密在每一层写入后都会被删除。
但是它仅适用于 buildkit。
这是一个小例子:
- Dockerfile
RUN --mount=type=secret,id=mysecret \ MYSECRET=$(cat /run/secrets/mysecret) \ && export MYSECRET \ && <do something with $MYSECRET env variable>
- 构建命令
DOCKER_BUILDKIT=1 docker build --secret id=mysecret,src=docker/mysecret.txt .
这是官方文档:
推荐阅读
- excel - 根据单元格选择选择适当的公式
- git - Git 使用 HTTPS 推送凭据和权限
- python - 如何从我的 ax.pcolormesh() 密度图中删除矩形白色框?
- c++ - 为什么在类与继承的情况下输出与所需的输出不同?
- android - 是否有记录在案的 Android 版本接收安全更新的生命周期?
- python - 如何让 VS Code 编辑器知道在 python 中属于导入的包?
- xml - 使用 XSLT 复制前 N 个节点及其子节点
- git - Git post-receive hook 无法结帐,致命:你在一个尚未出生的分支上
- ios - Xcode 12.0.1 命令 PhaseScriptExecution 因 ZendeskSDK 的非零退出代码而失败
- javascript - 谷歌表创建一个超链接()之类的功能来打开弹出消息