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

nad*_*ish 11 docker dockerfile

我可以使用-e选项传递环境变量。但是我不确定如何使用docker run命令将命令行参数传递给入口点的jar。

Docker文件

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Siy*_*iyu 12

以exec形式使用ENTRYPOINT

ENTRYPOINT ['java', '-jar', '/dir/test-1.0.1.jar']
Run Code Online (Sandbox Code Playgroud)

然后,当您运行时docker run -it testjava $value$value将在您的入口点之后被“追加”java -jar /dir/test-1.0.1.jar $value

  • 它对我来说用单引号不起作用,“docker run myimage --build”抱怨 _--build: [npx,: not found_ (my dockerfile: `ENTRYPOINT ['npx', 'mycommand']`)。将它们更改为双引号即可,即 `ENTRYPOINT ["npx", "mycommand"]` (3认同)
  • ...并将覆盖dockerfile中的CMD(如果存在) (2认同)
  • 您必须使用双引号,因为它实际上使用 JSON 数组语法。 (2认同)

gra*_*pes 8

你应该释放的组合的功率ENTRYPOINTCMD

将您的命令行的开始部分(不应更改)放到ENTRYPOINT最后,将应该可配置的末尾放到中CMD。然后,您可以简单地将必要的参数附加到docker run命令中。像这样:

Docker文件

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"]
Run Code Online (Sandbox Code Playgroud)

# 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
Run Code Online (Sandbox Code Playgroud)

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

  • 好的!但是如果我想传递多个命令行参数怎么办? (7认同)
  • 显然,链接 URL 上的内容已被替换为不同的内容。 (4认同)