我正在尝试使用 docker 和 docker-compose 来使用环境变量构建一组具有一些自定义参数的容器 - 例如,我想在特定位置挂载一个目录容器。该特定位置存储在环境变量中,并使用如下命令在 Dockerfile 中创建:
RUN mkdir $custom_location
我将参数保存在一个 .env 文件中,该文件填充 docker-compose 文件。
容器运行后,使用 printenv
命令我可以看到 env 变量的传输已生效,我可以手动运行该命令
mkdir $custom_location
但该命令在 dockerfile 构建过程中尚未成功。
Dockerfile 的摘要版本如下所示:
FROM python:3.6.5 as my_base
ENV CUSTOM_PATH=$CUSTOM_PATH
RUN mkdir $CUSTOM_PATH
docker-compose.yml 的摘要版本如下所示:
service:
environment:
- CUSTOM_PATH=${CUSTOM_PATH}
build: ./Docker
我收到的错误如下所示:
Step 20/20 : RUN mkdir $CUSTOM_PATH ---> Running in 437aa3f09dbb mkdir: missing operand Try 'mkdir --help' for more information. The command '/bin/sh -c mkdir $CUSTOM_PATH' returned a non-zero code: 1
为什么会这样?
ENV 变量已成功进入正在运行的容器中。使用 printenv
我可以看到它们。
最佳答案
您可以成功使用ARG
与 ENV
在你的Dockerfile
。请参阅the docs for this :
You can use an
ARG
or anENV
instruction to specify variables that are available to theRUN
instruction. Environment variables defined using theENV
instruction always override anARG
instruction of the same name. Consider thisDockerfile
with anENV
andARG
instruction.
FROM ubuntu
ARG CONT_IMG_VER
ENV CONT_IMG_VER ${CONT_IMG_VER:-v1.0.0}
RUN echo $CONT_IMG_VER
所以,就你的情况来说应该是
FROM python:3.6.5 as my_base
ARG CUSTOM_PATH=<some default path if you wish>
ENV CUSTOM_PATH=$CUSTOM_PATH
RUN mkdir $CUSTOM_PATH
之后您可以使用 docker build --build-arg CUSTOM_PATH=/var/log/whatever .
构建镜像它应该可以工作。
关于docker - 使用 ENV 变量在 Dockerfile 中创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50305661/