docker运行将参数传递给入口点

时间:2018-11-29 16:49:05

标签: docker dockerfile

我可以使用-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

2 个答案:

答案 0 :(得分:5)

以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

答案 1 :(得分:3)

您应该释放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"]

Sh

# 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

本文给出了很好的解释: https://medium.freecodecamp.org/docker-entrypoint-cmd-dockerfile-best-practices-abc591c30e21