Java Docker:在运行期间在容器中持久化生成参数?

Java Docker:在运行期间在容器中持久化生成参数?,java,docker,dockerfile,docker-build,Java,Docker,Dockerfile,Docker Build,在Docker构建阶段,我为要复制到容器中的特定JAR文件传入一个参数 Docker Build docker build-tfoo服务--build arg FAT_JAR=foo-service-1.0.0-SNAPSHOT Dockerfile FROM maven:3.3-jdk-8-alpine # Install packages RUN apk add --no-cache curl tar bash wget EXPOSE 9000 ARG FAT_JAR RUN ech

在Docker构建阶段,我为要复制到容器中的特定JAR文件传入一个参数

Docker Build

docker build-tfoo服务--build arg FAT_JAR=foo-service-1.0.0-SNAPSHOT

Dockerfile

FROM maven:3.3-jdk-8-alpine

# Install packages
RUN apk add --no-cache curl tar bash wget

EXPOSE 9000

ARG FAT_JAR

RUN echo "Copying $FAT_JAR.jar to container"


# Copy Fat Jar to directory
RUN mkdir /home/test
COPY target/$FAT_JAR.jar /home/test/
ADD config /home/test/config

# Set Jar permissions
RUN chmod -R 766 /home/test

CMD cd /home/test && java -jar "$FAT_JAR.jar" server config/local.yml
当我尝试运行Docker容器时,它无法打开我的jar文件,因为
$FAT\u jar
没有保存在容器中

Docker Run

docker运行--add host=“localhost:10.0.2.2”-t foo服务

错误

错误:无法访问jarfile.jar

如何持久化或使容器知道需要加载哪个文件

i、 e

java-jarfoo-service-1.0.0-SNAPSHOT.jar服务器配置/local.yml


谢谢

在构建或运行期间,我在哪里使用它?对不起,我误解了这个问题。您真正的问题是,您将jar放在/home/test中,但您正在从/home/checkout运行java——jar不在checkout目录中,它在test目录中。是的,这是由于混淆造成的输入错误,仍然是相同的问题。虽然ARG定义了构建时参数,但在容器运行时会计算CMD指令。您是否尝试过像这样运行:
docker run--add host=“localhost:10.0.2.2”-t-e FAT\u JAR='foo-service-1.0.0-SNAPSHOT'foo service
如果您真的想在构建时指定它,请使用dockerfile中的ENV指令并将变量设置为给定参数的值。在构建或运行期间,我在哪里使用它?对不起,我误解了这个问题。您真正的问题是,您将jar放在/home/test中,但您正在从/home/checkout运行java——jar不在checkout目录中,它在test目录中。是的,这是由于混淆造成的输入错误,仍然是相同的问题。虽然ARG定义了构建时参数,但在容器运行时会计算CMD指令。您是否尝试过像这样运行:
docker run--add host=“localhost:10.0.2.2”-t-e FAT\u JAR='foo-service-1.0.0-SNAPSHOT'foo service
如果您确实想在构建时指定它,请在dockerfile中使用ENV指令,并将变量设置为给定参数的值。