Docker запускает контейнер из-за ошибки образа dockerfile - PullRequest
0 голосов
/ 24 июня 2018

У меня возникает следующая ошибка при попытке запустить:

$ docker run my-app-11
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"java -jar /opt/my-app-1.0-SNAPSHOT.jar\": stat java -jar /opt/my-app-1.0-SNAPSHOT.jar: no such file or directory": unknown.

Файл Docker, который я использовал для создания изображения, выглядит следующим образом:

FROM anapsix/alpine-java

COPY target/my-app-1.0-SNAPSHOT.jar /opt/my-app-1.0-SNAPSHOT.jar

WORKDIR /opt

CMD ["java -jar /opt/my-app-1.0-SNAPSHOT.jar"]

Когда я вхожу в контейнер и запускаю команду, она хорошо работает:

$ docker run -it my-app-11 /bin/bash
bash-4.4# java -jar /opt/my-app-1.0-SNAPSHOT.jar 
Hello World!

1 Ответ

0 голосов
/ 24 июня 2018

Из документации для CMD:

Инструкция CMD имеет три формы:

  1. CMD ["исполняемый файл", "param1""," param2 "] (exec form, это предпочтительная форма)
  2. CMD [" param1 "," param2 "] (в качестве параметров по умолчанию для ENTRYPOINT)
  3. CMD команда param1 param2 (форма оболочки)

И:

Примечание: В отличие от формы оболочки, форма exec не вызывает командную оболочку.Это означает, что обычная обработка оболочки не происходит.

Также:

Если вы хотите запустить <command> без оболочки, вы должны выразить команду какМассив JSON и дают полный путь к исполняемому файлу. (выделено мной)

Итак, у вас есть пара проблем:

  1. Выиспользуя форму Exec (потому что она заключена в квадратные скобки), но вы не указали полный путь к исполняемому файлу Java.
  2. Вы не предоставили аргументы в виде массива JSON

Когда вывойдите в контейнер, вы запускаете оболочку BASH, поэтому исполняемый файл Java находится в пути, и команда запускается.Это не тот случай, когда CMD работает как exec, отсюда и ошибка.

Я думаю, что если вы измените строку на:

CMD ["/path/to/java", "-jar", "/opt/my-app-1.0-SNAPSHOT.jar"]

или

CMD java -jar /opt/my-app-1.0-SNAPSHOT.jar

Любой из них должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...