Docker构build不正确设置envvariables?

我有这个Dockerfile:

FROM ubuntu:latest RUN apt-get update && apt-get install -y \ curl \ python3-dev \ python3-setuptools \ python3-pip RUN rm -rf /var/lib/apt/lists/* && \ apt-get clean ADD . /usr/src/index-server WORKDIR /usr/src/index-server RUN pip3 install --upgrade pip RUN pip3 install -r requirements.txt EXPOSE 8000 ENV LC_CTYPE=C.UTF-8 ENV FLASK_APP=app_server.py CMD /usr/local/bin/flask run --host=0.0.0.0 

它build立良好。 但是当我尝试运行它时,遇到了一个Python错误,我错误地设置了区域设置值。

在我的主机locale | grep -E 'LC_ALL|LC_CTYPE|LANG' locale | grep -E 'LC_ALL|LC_CTYPE|LANG'返回:

 LANG="en_US.UTF-8" LC_CTYPE="en_US.UTF-8" LC_ALL= 

但是,当我尝试与docker实例相同( docker run -t 657c402ec253 locale | grep -E 'LC_ALL|LC_CTYPE|LANG' )时,我得到这个:

 LANG= LANGUAGE= LC_CTYPE="POSIX" LC_ALL= 

如果我使用docker的-e标志来设置envvariables,它可以正常工作:

 $ docker run -e LC_CTYPE=C.UTF-8 -t 657c402ec253 locale | grep -E 'LC_ALL|LC_CTYPE|LANG' LANG= LANGUAGE= LC_CTYPE=C.UTF-8 LC_ALL= 

这是怎么回事?

Docker构build过程中设置的ENV将不可用于容器为了将ENV保留为未来容器,您需要使用ARG命令。

因此,在创build图像时,您需要传递实际传递给ENV值的ARG值,并将其设置为容器。

在docker文件中添加这个

ARG buildtime_variable = default_value。

ENV env_var_name = $ buildtime_variable

并运行这个命令

docker build –build-arg buildtime_variable = a_value#[…]

详细信息请点击链接https://vsupalov.com/docker-build-time-env-values/