gpt4 book ai didi

docker - Docker产生不正确的ENTRYPOINT命令

转载 作者:行者123 更新时间:2023-12-02 21:00:40 26 4
gpt4 key购买 nike

我正在尝试为我的应用程序构建docker镜像,但由于ENTRYPOINT执行失败,因此无法基于该镜像运行容器:

User.Name@pc-name MINGW64 ~
$ docker run some-repository.com/application-name:latest
/bin/sh: line 0: [: missing `]'

有我的Dockerfile:
FROM some-repository.com/openjdk:11.0.5-jre-slim as build
FROM some-repository.com/rhel7-atomic

COPY --from=build /usr/local/openjdk-11 jx/

LABEL Team="some-team"
LABEL AppVersion=1111

RUN mkdir -p id
COPY application-name-1.6.17-SNAPSHOT.jar id

EXPOSE 26000

ENTRYPOINT [ "sh", "-c", "exec echo hello \$JAVA_OPTS \
world"]


docker inspect的结果:
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"ENTRYPOINT [\"/bin/sh\" \"-c\" \"[ \\\"sh\\\", \\\"-c\\\", \\\"exec echo hello \\\\$JAVA_OPTS world\\\"]\"]"
],
"ArgsEscaped": true,
"Entrypoint": [
"/bin/sh",
"-c",
"[ \"sh\", \"-c\", \"exec echo hello \\$JAVA_OPTS world\"]"
]

看起来ENTRYPOINT命令被错误地插值,并且 [字符已添加到命令中。

为什么会出现此问题,我该如何解决?

最佳答案

删除$前面的转义符,这是json中的无效转义符,当字符串不解析为json时,它将解析为传递给shell的字符串。

ENTRYPOINT [ "sh", "-c", "exec echo hello $JAVA_OPTS \
world"]

如果您希望echo来打印 $,而不是让 sh扩展变量,那么您将需要使用两次转义符来转义转义字符,以便json将单个 \传递给正在运行的命令:
ENTRYPOINT [ "sh", "-c", "exec echo hello \\$JAVA_OPTS \
world"]

关于docker - Docker产生不正确的ENTRYPOINT命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60475812/

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