docker - 使用 ENV 变量在 Dockerfile 中创建目录

标签 docker docker-compose environment-variables dockerfile

我正在尝试使用 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 我可以看到它们。

最佳答案

您可以成功使用ARGENV在你的Dockerfile 。请参阅the docs for this :

You can use an ARG or an ENV instruction to specify variables that are available to the RUN instruction. Environment variables defined using the ENV instruction always override an ARG instruction of the same name. Consider this Dockerfile with an ENV and ARG 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/

相关文章:

java - Spring Boot 和 Docker-compose 设置参数

ruby-on-rails - Rails 和 Azure VM : where to set environment variables (mailer)

powershell - 使用powershell批量设置变量

docker - 如何配置 Docker 容器以从 ESX 上运行的 dhcp 服务器获取 DHCP IP/s

django - docker-compose 用于纯数据容器和 Web 服务器 postgresql

docker - 在Docker的Rstudio上安装png软件包,但失败

docker - 复制所有项目。 Docker文件命令

sql-server - 如何创建时区与本地计算机时区匹配的 Docker 容器?

docker-compose 使用循环创建服务

reactjs - 更改后重新加载 .env 变量