Docker compose中的Docker args不会传递到Dockerfile中

时间:2019-09-15 10:37:05

标签: docker docker-compose dockerfile quarkus

我正在使用Windows 10下的最新Docker Toolbox构建Quarkus应用程序的本机映像。

$ docker -v
Docker version 19.03.1, build 74b1e89e8a

docker-compose.yaml文件:

version: '3.7' # specify docker-compose version

services:
  blogdb:
    image: postgres
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_DB: blogdb
      POSTGRES_USER: user
    volumes:
      - ./data:/var/lib/postgresql

  post-service: 
    image: hantsy/quarkus-post-service
    build: 
      context: ./backend
      dockerfile: src/main/docker/Dockerfile.multistage
      args:
        - QUARKUS_DATASOURCE_URL
    environment:
      QUARKUS_DATASOURCE_URL: jdbc:postgresql://blogdb:5432/blogdb
    ports:
      - "8080:8080" #specify ports forewarding
    depends_on:
      - blogdb

和Dockerfile:

## Stage 1 : build with maven builder image with native capabilities
FROM quay.io/quarkus/centos-quarkus-maven:19.1.1 AS build
ARG QUARKUS_DATASOURCE_URL
RUN echo "QUARKUS_DATASOURCE_URL>>>: $QUARKUS_DATASOURCE_URL"
ENV QUARKUS_DATASOURCE_URL $QUARKUS_DATASOURCE_URL
WORKDIR /usr/src/app
COPY pom.xml .
RUN mvn -U dependency:go-offline dependency:resolve-plugins -Pnative
COPY src/ /usr/src/app/src/
USER root
RUN chown -R quarkus /usr/src/app
USER quarkus
RUN mvn clean package -Pnative -Dquarkus.datasource.url=$QUARKUS_DATASOURCE_URL
## -DskipTests -Dmaven.test.skip=true

## Stage 2 : create the docker final image
FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY --from=build /usr/src/app/target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

echo 始终为arg QUARKUS_DATASOURCE_URL打印空白。

我尝试将 args 更改为QUARKUS_DATASOURCE_URL=${QUARKUS_DATASOURCE_URL},但仍显示空白。

它无法读取Docker docs described所说的docker-compose.yaml文件中定义的环境。

如果直接将值设置为字符串,它将起作用,例如。 QUARKUS_DATASOURCE_URL="test"

1 个答案:

答案 0 :(得分:0)

根据this,您需要遵循Windows PowerShell语法。

似乎在使用PowerShell或cmd时必须使用$ env:arg或%arg%,但是在使用docker命令时必须使用$ arg。

| bill_num | food_num | quantity | bill_price |
| -------- | -------- | -------- | ---------- |
| 1        | 1        | 5        | 50         |

Can't get Docker to expand ARG define at head of file

  

似乎在使用powershell时必须使用$ env:arg或%arg%   cmd,但在使用docker命令时必须使用$ arg。