Docker-compose java не может получить доступ к jarfile

Я пытаюсь запустить приложение 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. Любая помощь приветствуется.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
0
2 403
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы переопределяете содержимое / usr / src / core [куда вы копируете файл jar], монтируя содержимое из ./core в docker-compose. Удалите ниже монтировку из services-> core-> volume и попробуйте. volumes: - './core:/usr/src/core'

Да, именно так. Я уже понял, что проблема заключалась в том, что файл jarfile был не там, где я думал (был введен в заблуждение тем фактом, что он был там при запуске автономного контейнера, но там я не монтировал тома), но я не получить возможность ответить на свой вопрос. :)

diekunstderfuge 29.05.2018 23:30

Спасибо, братан, за этот ответ, именно это заставило меня запутаться, почему он не работает.

Bahramdun Adil 05.04.2021 12:39

Другие вопросы по теме