gpt4 book ai didi

java - 如何对容器进行 dockerize 以便它可以在有或没有命令行参数的情况下运行?

转载 作者:行者123 更新时间:2023-12-02 08:41:48 25 4
gpt4 key购买 nike

我有一个 jar 可以处理命令行参数(如果提供),或者打开 shell:

$ java -cp incrementor.jar de.peer.shell.incrementor.Main 4
4 + 1 = 5
$ java -cp incrementor.jar de.peer.shell.incrementor.Main
4
4 + 1 = 5
exit

我想对这个 jar 进行 dockerize,以便它可以以任何一种方式执行。我的Dockerfile是:

FROM openjdk:latest

COPY incrementor.jar /usr/src/incrementor.jar

???

我可以通过添加 CMD java -cp /usr/src/incrementor.jar de.peer.shell.incrementor.Main 4 来创建一个对参数进行硬编码的容器。

$ docker image build -t incrementor:hardcoded .
$ docker run incrementor:hardcoded
4 + 1 = 5

我可以通过添加 CMD java -cp /usr/src/incrementor.jar de.peer.shell.incrementor.Main 来创建一个打开 shell 但不接受命令行参数的容器。

$ docker image build -t incrementor:shell .
$ docker run -it incrementor:shell
4
4 + 1 = 5
exit
$ docker run -it incrementor:shell 5 # same result for skipping `-it`
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"5\": executable file not found in $PATH": unknown.
ERRO[0002] error waiting for container: context canceled

我可以构建一个接受命令行参数但不会打开 shell 的容器,方法是添加 ENTRYPOINT ["java", "-cp", "/usr/src/incrementor.jar", "de.peer.shell.incrementor.Main"]

$ docker image build -t incrementor:cmdargs .
$ docker run incrementor:cmdargs 4
4 + 1 = 5
$ docker run incrementor:cmdargs
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1478)
at de.peer.shell.incrementor.Main.main(Main.java:13)

如何构建一个容器,使其既可以处理命令行参数,也可以不处理命令行参数?

最佳答案

最后一个示例是正确的,您只需为 shell 添加 -it 即可:

FROM openjdk:latest

COPY incrementor.jar /usr/src/incrementor.jar

ENTRYPOINT ["java", "-cp", "/usr/src/incrementor.jar", "de.peer.shell.incrementor.Main"]

然后

$ docker image build -t incrementor:both .
$ docker run incrementor:both 4
4 + 1 = 5
$ docker run -it incrementor:both
4
4 + 1 = 5
exit

关于java - 如何对容器进行 dockerize 以便它可以在有或没有命令行参数的情况下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61340980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com