如何在 Dockerfile 中使用来自 docker-compose.yml 的环境变量?

Hed*_*dge 4 docker dockerfile docker-compose

docker-compose.yml看起来像这样:

version: '2'
services:
  myapp:
    build:
      context: .
    environment:
      - GITLAB_USER=myusername
Run Code Online (Sandbox Code Playgroud)

我想在 a 中使用该环境变量,Dockerfile但它不起作用:

FROM node:7
ENV GITLAB_USER=${GITLAB_USER} \
RUN echo '${GITLAB_USER}' 
Run Code Online (Sandbox Code Playgroud)

回声只是: ${GITLAB_USER}

我怎样才能使这项工作正常工作,以便我可以使用.envDocker 内部文件中的变量(通过 docker-compose)?

BMi*_*tch 7

有两个不同的时间框架需要理解。构建镜像与运行容器是分开的。第一部分使用 Dockerfile 来创建你的镜像。第二部分采用生成的图像和所有设置(例如环境变量)来创建容器。

在 Dockerfile 中,该RUN行出现在构建时。如果要将参数传递到构建中,可以使用构建参数。您的 Dockerfile 将如下所示:

FROM node:7
ARG GITLAB_USER=default_user_name
# ENV is optional, without it the variable only exists at build time
# ENV GITLAB_USER=${GITLAB_USER}
RUN echo '${GITLAB_USER}' 
Run Code Online (Sandbox Code Playgroud)

你的 docker-compose.yml 文件看起来像:

version: '2'
services:
  myapp:
    build:
      context: .
      args:
      - GITLAB_USER=${GITLAB_USER}
Run Code Online (Sandbox Code Playgroud)

${GITLAB_USER}该YML文件中的值将与您的内部设定的值来替换.env文件。