我有这个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=
发生了什么事?
答案 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/