未从命令行正确读取Docker arg
使用此命令启动并运行传入参数的docker容器。/target/myapp-SNAPSHOT.jar,其中。/target/myapp-SNAPSHOT.jar是我希望运行的Spring boot应用程序:未从命令行正确读取Docker arg,docker,Docker,使用此命令启动并运行传入参数的docker容器。/target/myapp-SNAPSHOT.jar,其中。/target/myapp-SNAPSHOT.jar是我希望运行的Spring boot应用程序: docker build -t foo . && docker run -it foo -e J_FILE=./target/myapp-SNAPSHOT.jar 我收到错误消息: standard_init_linux.go:211: exec user process
docker build -t foo . && docker run -it foo -e J_FILE=./target/myapp-SNAPSHOT.jar
我收到错误消息:
standard_init_linux.go:211: exec user process caused "exec format error"
Dockerfile:
FROM adoptopenjdk/openjdk8:alpine-jre
LABEL app.name="test"
LABEL app.type="test"
ARG J_FILE
ADD ${J_FILE} /myapp.jar
COPY J_FILE /myapp.jar
COPY startup.sh /
RUN chmod +x startup.sh;
ENTRYPOINT ["/startup.sh"]
EXPOSE 8080
startup.sh:
#!/bin/sh
JAVA_HEAP_INITIAL=384m
JAVA_HEAP_MAX=768m
JAVA_METASPACE_MAX=128m
java -jar /app.jar
如果我将Dockerfile
更改为显式复制jar文件:
FROM adoptopenjdk/openjdk8:alpine-jre
LABEL app.name="test"
LABEL app.type="test"
COPY ./target/myapp-SNAPSHOT.jar /myapp.jar
COPY startup.sh /
RUN chmod +x startup.sh;
ENTRYPOINT ["/startup.sh"]
EXPOSE 8080
应用程序按预期启动。docker文件中的
ARG
标志用于配置docker映像。当您运行容器时,它不会有任何效果
因此,应将命令更新为如下所示:
docker build --build-arg J_FILE=./target/myapp-SNAPSHOT.jar -t foo . && docker run -it foo
FROM adoptopenjdk/openjdk8:alpine-jre
LABEL app.name="test"
LABEL app.type="test"
ARG J_FILE=./target/myapp-SNAPSHOT.jar
COPY ${J_FILE} /myapp.jar
COPY startup.sh /
RUN chmod +x startup.sh;
ENTRYPOINT ["/startup.sh"]
EXPOSE 8080
您还可以将Dockerfile
更新为如下所示:
docker build --build-arg J_FILE=./target/myapp-SNAPSHOT.jar -t foo . && docker run -it foo
FROM adoptopenjdk/openjdk8:alpine-jre
LABEL app.name="test"
LABEL app.type="test"
ARG J_FILE=./target/myapp-SNAPSHOT.jar
COPY ${J_FILE} /myapp.jar
COPY startup.sh /
RUN chmod +x startup.sh;
ENTRYPOINT ["/startup.sh"]
EXPOSE 8080
注2:上述文件中的更改:
复制
而不是添加
docker build
命令传递--build arg
,则将J_FILE
的默认值设置为/target/myapp SNAPSHOT.jar