首页 > 解决方案 > 是否可以使用 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

标签: dockerdockerfile

解决方案


您可以使用名为“--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 .
    

这是官方文档:

https://docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information


推荐阅读