簡體   English   中英

Docker 生成錯誤的 ENTRYPOINT 命令

[英]Docker produces incorrect ENTRYPOINT command

我正在嘗試為我的應用程序構建 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"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM