docker run将参数传递给入口点

sqyvllje  于 2023-03-29  发布在  Docker
关注(0)|答案(2)|浏览(175)

我能够使用-e选项传递环境变量。但我不确定如何使用docker run命令将命令行参数传递到entrypoint中的jar。
Dockerfile

FROM openjdk
ADD . /dir
WORKDIR /dir
COPY ./test-1.0.1.jar /dir/test-1.0.1.jar
ENTRYPOINT java -jar /dir/test-1.0.1.jar

test.sh

#! /bin/bash -l

export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key)

$value=7

docker run -e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY  -i -t testjava  $value
jm2pwxwz

jm2pwxwz1#

在exec形式下使用ENTRYPOINT

ENTRYPOINT ["java", "-jar", "/dir/test-1.0.1.jar"]

那么当你运行docker run -it testjava $value时,$value将被附加在你的入口点之后,就像java -jar /dir/test-1.0.1.jar $value一样

toe95027

toe950272#

您应该释放ENTRYPOINTCMD组合的威力。
将命令行的开头部分(预计不会更改)放入ENTRYPOINT,将尾部(应该是可配置的)放入CMD。然后您可以简单地将必要的参数添加到docker run命令中。如下所示:
Dockerfile

FROM openjdk
ADD . /dir
WORKDIR /dir
COPY ./test-1.0.1.jar /dir/test-1.0.1.jar
ENTRYPOINT ["java", "-jar"]
CMD ["/dir/test-1.0.1.jar"]

# this will run default jar - /dir/test-1.0.1.jar
docker run testjava

# this will run overriden jar
docker run testjava /dir/blahblah.jar

This article给出了一个很好的解释。

相关问题