Вы указали ENTRYPOINT, используя одно «слово». Когда вы запускаете контейнер, он пытается запустить его как одно «слово» - он ищет двоичный файл с именем sh -c java ...
, с пробелами и всем как часть имени файла. Если в вашей команде несколько «слов», и вы используете форму JSON -array, вам нужно правильно вручную разбить ее на слова.
ENTRYPOINT ["sh", "-c", "java -Dspring.config.location=..."]
Dockerfile CMD и ENTRYPOINT довольно похожи ; оба обеспечивают часть команды, которую в конечном счете выполняет контейнер. Если вам нужен только один из них, я бы порекомендовал использовать CMD вместо этого по двум причинам: это облегчает получение оболочки отладки для встроенного образа docker run --rm -it myimage /bin/sh
, и существует довольно стандартный шаблон использования сценария ENTRYPOINT для выполнения некоторых начальная настройка, а затем exec "$@"
для запуска CMD.
CMD ["sh", "-c", "java -Dspring.config.location=..."]
Если у вас есть эта форма, Docker может предоставить вам оболочку sh -c ...
.
CMD java -Dspring.config.location=...
С немного больше очистки, что сделало бы финальный Dockerfile чем-то вроде
FROM openjdk:8-jre-alpine
COPY backofficeservices-0.0.1.jar /app.jar
COPY application.properties /application.properties
ENV JAVA_OPTS=""
CMD java \
-Dspring.config.location=/application.properties \
-Djava.security.egd=file:/dev/./urandom \
$JAVA_OPTS \
-jar /app.jar
EXPOSE 8080