Я пытаюсь запустить приложение Spring Boot в качестве одной из служб в настройке Docker Compose, но всякий раз, когда я запускаю docker-compose up -d, контейнер, в котором запущено приложение Spring Boot, выходит из строя и немедленно закрывается. В этом посте я использую общие имена, такие как «mycontainer» и «myfile».
Запуск docker-compose logs core показывает, что сообщение об ошибке:
mycontainer | Error: unable to access jarfile myjar.jar
Мой файл для создания докеров:
version: '3.3'
services:
webapp:
image: webapp_image
container_name: webapp-container
build:
context: ./webapp
dockerfile: Dockerfile
volumes:
- './webapp:/usr/src/app'
ports:
- 3000:3000
- 35729:35729
environment:
- NODE_ENV=development
- env_file=./webapp/.env
core:
image: core_image
container_name: core-container
build:
context: ./core
dockerfile: Dockerfile
volumes:
- './core:/usr/src/core'
- './algorithms:/usr/src/algorithms'
ports:
- 8080:8080
environment:
- JARFILE=myjar.jar
- JAVA_OPTIONS=-Djava.security.egd=file:/dev/./urandom
Dockerfile для службы core, которая запускает приложение Spring Boot, выглядит следующим образом:
FROM openjdk:8-jdk-alpine
RUN mkdir -p /usr/src/core
RUN mkdir -p /usr/src/algorithms
ADD ./myproject/target/myjar.jar /usr/src/core
ADD ./algorithms /usr/src/algorithms
WORKDIR /usr/src/core
CMD java $JAVA_OPTIONS -jar $JARFILE
Если я запустил отдельный контейнер из образа core_image и установил те же переменные среды, которые я определил в файле docker-compose, я могу успешно запустить приложение Spring Boot, например:
$ docker run -it -p 8080:8080 --name mycontainer core_image sh
$ /usr/src/core # ls -l
total 15852
-rwxr-xr-x 1 root root 16228579 Apr 21 22:44 myjar.jar
$ /usr/src/core # java $JAVA_OPTIONS -jar $JARFILE
Но если я запустил контейнер из того же образа как часть docker-compose up -d, контейнер выйдет из строя с ошибкой, что Java не может получить доступ к jarfile. Я пробовал указать абсолютный путь к jar-файлу в CMD Dockerfile, но это не помогает при запуске из Docker Compose.
Кто-нибудь знает, что может быть причиной этого? Я использую хост с Windows 10. Любая помощь приветствуется.




Похоже, вы переопределяете содержимое / usr / src / core [куда вы копируете файл jar], монтируя содержимое из ./core в docker-compose. Удалите ниже монтировку из services-> core-> volume и попробуйте.
volumes:
- './core:/usr/src/core'
Спасибо, братан, за этот ответ, именно это заставило меня запутаться, почему он не работает.
Да, именно так. Я уже понял, что проблема заключалась в том, что файл jarfile был не там, где я думал (был введен в заблуждение тем фактом, что он был там при запуске автономного контейнера, но там я не монтировал тома), но я не получить возможность ответить на свой вопрос. :)