我正在使用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"
。
答案 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。