我可以使用-e
选项传递环境变量。 但我不确定如何使用 docker run 命令将命令行参数传递给入口点中的 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
在其执行形式中使用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
你应该释放ENTRYPOINT
和CMD
结合的力量。
将命令行的开头部分(预计不会更改)放入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
这篇文章给出了一个很好的解释。