Docker CMD + ENTRYPOINT не соответствует поведению командной строки - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь создать среду вертексного докера на основе безударного Java-образа.Когда я запускаю контейнер Docker, он не находит класс, который пытаюсь выполнить.

Однако, когда я запускаю команду в контейнере, она работает просто отлично.

Вот мойDockerfile

FROM gcr.io/distroless/java:debug
ADD vert.x-3.7.0.tar.gz /usr/

ENTRYPOINT ["java","-cp", "'/usr/vertx/lib/*'", "io.vertx.core.Launcher", "version"]
CMD ["-start"]

Когда я запускаю контейнер, я получаю следующую ошибку:

Error: Could not find or load main class io.vertx.core.Launcher

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

docker run --entrypoint=sh -ti <image_name>

который дает оболочку busybox.Затем я ввел в командной строке следующее:

java -cp '/usr/vertx/lib/*' io.vertx.core.Launcher version

И все заработало нормально, выдав мне следующий вывод

Apr 07, 2019 7:20:18 PM io.vertx.core.impl.launcher.commands.VersionCommand
INFO: 3.7.0

Я ожидал того же поведения от комбинации ENTRYPOINT + CMD.Я просто не могу понять, почему этот комбо не работает.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Окончательным решением было использование следующего Dockerfile:

FROM gcr.io/distroless/java
ADD vert.x-3.7.0.tar.gz /usr/

ENTRYPOINT ["java","-cp", "/usr/vertx/lib/*", "io.vertx.core.Launcher", "version"]

Я удалил: debug только потому, что оболочка busybox была только для отладки. Это не повлияло на решение.

Окончательный размер был 222 МБ, по сравнению с примерно 474 МБ! Мне нужно провести некоторое тестирование, чтобы увидеть, насколько полно изображение функционирует, но на данный момент я надеюсь, что оно будет работать как уменьшенное изображение vertx.

2 голосов
/ 08 апреля 2019

В вашем Dockerfile есть ошибка.У вас есть:

ENTRYPOINT ["java","-cp", "'/usr/vertx/lib/*'", "io.vertx.core.Launcher", "version"]

Слишком много кавычек в третьем параметре.У вас есть:

"'/usr/vertx/lib/*'"

Вы хотите:

"/usr/vertx/lib/*"

В вашем текущем Dockerfile аргументом опции -cp является буквальное значение '/usr/vertx/lib/*', включая одиночноецитаты.Это, конечно, не соответствует ни одному пути файловой системы.

...