【问题标题】:ENV vars for docker build in multi-stage build多阶段构建中用于 docker 构建的 ENV vars
【发布时间】:2021-12-17 09:36:28
【问题描述】:

我有一个多阶段构建,其中 python 脚本在第一阶段运行并使用多个环境变量。

如何在docker build 命令中设置这些变量?

这是 Dockerfile:

FROM python:3 AS exporter

RUN mkdir -p /opt/export && pip install mysql-connector-python

ADD --chmod=555 export.py /opt/export


CMD ["python", "/opt/export/export.py"]

FROM nginx

COPY --from=exporter /tmp/gen/* /usr/share/nginx/html

我的export.py 脚本读取了几个环境变量,我有一个.env 文件。如果我运行一个使用第一阶段构建的容器并传递--env-file 它可以工作,但我似乎无法让它在构建阶段工作。

如何在构建第一阶段时使环境变量可用?

我不在乎它们是否保存在图像中......

【问题讨论】:

    标签: docker


    【解决方案1】:

    您正在寻找ARG 指令。它仅在构建时可用,在图像运行时不可用。不要将它们用于不应该保留的秘密!

    # default value if not using --build-arg instruction
    ARG GLOBAL_AVAILABLE=iamglobal
    
    FROM python:3 AS exporter
    
    RUN mkdir -p /opt/export && pip install mysql-connector-python
    
    ADD --chmod=555 export.py /opt/export
    
    ARG GLOBAL_AVAILABLE
    ENV GLOBAL_AVAILABLE=$GLOBAL_AVAILABLE
    
    # only visible at exporter build stage:
    ARG LOCAL_AVAILABLE=aimlocal
    
    # multistage visible:
    RUN echo ${GLOBAL_AVAILABLE}
    
    # local stage visible (exporter build stage):
    RUN echo ${LOCAL_AVAILABLE}
    
    CMD ["python", "/opt/export/export.py"]
    
    FROM nginx
    
    COPY --from=exporter /tmp/gen/* /usr/share/nginx/html
    

    您可以使用--build-arg 标志传递自定义ARG 值:

    docker build -t <image-name>:<tag> --build-arg GLOBAL_AVAILABLE=abc .

    传递多个参数的一般格式是:

    docker build -t <image-name>:<tag> --build-arg <key1>=<value1> --build-arg <key2>=<value2> .

    一些参考:

    https://docs.docker.com/engine/reference/builder/

    https://blog.bitsrc.io/how-to-pass-environment-info-during-docker-builds-1f7c5566dd0e

    https://vsupalov.com/docker-arg-env-variable-guide/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 2020-07-13
      • 2022-11-25
      • 1970-01-01
      • 2019-09-27
      • 2023-03-18
      相关资源
      最近更新 更多