Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未从命令行正确读取Docker arg_Docker - Fatal编程技术网

未从命令行正确读取Docker arg

未从命令行正确读取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容器。/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 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