代码之家  ›  专栏  ›  技术社区  ›  Hantsy

Docker compose中的Docker参数不传递到Dockerfile

  •  0
  • Hantsy  · 技术社区  · 5 年前

    $ 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
    

    ## 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"]
    

    这个 回声 QUARKUS_DATASOURCE_URL

    我试图改变现状 参数 QUARKUS_DATASOURCE_URL=${QUARKUS_DATASOURCE_URL}

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

    如果直接把值设为字符串,它就工作了。 QUARKUS_DATASOURCE_URL="test" .

    0 回复  |  直到 5 年前
        1
  •  0
  •   Adiii    5 年前

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

    看来你必须使用$env:arg or %使用PowerShell或cmd时为arg%,但使用docker命令时必须使用$arg。

    FROM microsoft/nanoserver
    ARG QUARKUS_DATASOURCE_URL=some_default_value
    RUN echo %QUARKUS_DATASOURCE_URL%
    ENV QUARKUS_DATASOURCE_URL %QUARKUS_DATASOURCE_URL%
    

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

    cmd,但在使用docker命令时必须使用$arg。