Docker выдает неверную команду ENTRYPOINT - PullRequest
0 голосов
/ 01 марта 2020

Я пытаюсь создать docker образ для своего приложения, но я не могу запустить контейнер на основе этого образа из-за сбоя при выполнении ENTRYPOINT:

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

Мой файл Docker есть:

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 была интерполирована неправильно и в команду был добавлен символ [.

Почему эта проблема появляется и как я могу это исправить?

1 Ответ

2 голосов
/ 01 марта 2020

Удалите escape перед $, это неверный escape в json, и когда строка не анализируется как json, она анализируется как строка, переданная оболочке.

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

Если вы хотите, чтобы echo напечатал $, вместо того, чтобы sh раскрывать переменную, вам понадобится двойной escape для экранирования символа escape, чтобы json пропустил один \ к выполняемой команде:

ENTRYPOINT [ "sh", "-c", "exec echo hello \\$JAVA_OPTS \
    world"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...