docker-compose build args没有传递给Dockerfile

时间:2018-02-16 16:52:59

标签: docker docker-compose

搬运工-compose.yml:

version: "3"

services:
  ei:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        NODE_VERSION: 8
        HELLO: 5

Dockerfile:

ARG NODE_VERSION
ARG HELLO

FROM node:$NODE_VERSION

RUN echo "-> $HELLO"
RUN echo "-> $NODE_VERSION"

结果:

km@Karls-MBP ~/dev/ve (km/ref) $ docker-compose -f docker-compose.yml build --no-cache
vertica uses an image, skipping
Building ei
Step 1/14 : ARG NODE_VERSION
Step 2/14 : ARG HELLO
Step 3/14 : FROM node:$NODE_VERSION
 ---> e63de54eee16
Step 4/14 : RUN echo "-> $HELLO"
 ---> Running in e93d89e15913
-> 
Removing intermediate container e93d89e15913
 ---> c305b277291c
Step 5/14 : RUN echo "-> $NODE_VERSION"
 ---> Running in 39e8e656c0bd
-> 8

我不知道为什么这不起作用。如果我更改节点版本号,则数字会更改。

2 个答案:

答案 0 :(得分:20)

compose文件中定义的参数在Dockerfile上可用,但仅在FROM之前和之后。在FROM参数不可用之后:

  

ARG之前声明的FROM在构建阶段之外,因此在FROM之后的任何指令中都不能使用它。 - from docker docs

为什么论证NODE_VERSION有效?
参数NODE_VERSIONFROM之后无效。该参数仅用于FROMFROM node:8)。在FROM之后,有一个environment variable of the image具有相同的名称。所以你回显图像的环境变量而不是你的撰写文件的参数。

但您可以在FROM之后使用参数的默认值:

  

使用在第一个ARG之前声明的FROM的默认值,使用ARG指令而没有构建阶段内的值。 - from docker docs

ARG NODE_VERSION

FROM node:$NODE_VERSION

ARG HELLO

RUN echo "-> $HELLO"
RUN echo "-> $NODE_VERSION"

要使用并显示参数中定义的节点版本,您需要重命名此参数。因此,您可以使用以下内容显示所有参数和图像的环境变量:

<强> Dockerfile:

ARG CUSTOM_NODE_VERSION

FROM node:$CUSTOM_NODE_VERSION

ARG CUSTOM_NODE_VERSION
ARG HELLO

RUN echo "-> $HELLO"               #output: 5
RUN echo "-> $NODE_VERSION"        #output: 8.9.4
RUN echo "-> $CUSTOM_NODE_VERSION" #output: 8

<强>搬运工-compose.yml:

version: "3"

services:
  ei:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        CUSTOM_NODE_VERSION: 8
        HELLO: 5

答案 1 :(得分:0)

万一您来到这里,语法和一切都很好,但该变量仍未通过...

在某些情况下,您可能会尝试覆盖由父图像设置的变量(在我的情况下,尝试设置BUNDLE_PATH父图像已经设置的ruby图片)。

在这种情况下,您可以简单地将参数重命名为不会与父级冲突的名称(即,使用BUNDLE_PATH代替ARG_BUNDLE_PATH)!

ARG ARG_BUNDLE_PATH
ENV BUNDLE_PATH=$ARG_BUNDLE_PATH

有关更多详细信息,请参见此问题:https://github.com/moby/moby/issues/34494