Docker构建没有正确设置env变量?

时间:2017-12-09 05:58:00

标签: docker dockerfile

我有这个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

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

在我的主机上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标志设置env变量,它可以正常工作:

$ 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=

发生了什么事?

1 个答案:

答案 0 :(得分:1)

在docker构建期间设置的ENV将不可用于容器 为了将ENV用于未来的容器,您需要使用ARG命令。

因此,在构建图像时,您需要传递ARG值,实习传递给ENV值,它将设置为容器。

在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/