docker-compose java无法访问jarfile

时间:2018-05-28 20:41:54

标签: java shell docker spring-boot docker-compose

我尝试将Spring Boot应用程序作为Docker Compose设置中的一项服务运行,但每当我运行docker-compose up -d时,运行Spring Boot应用程序的容器都会失败并立即退出。出于这篇文章的目的,我使用了通用名称,例如" mycontainer"和" myfile"。

运行docker-compose logs core表示错误消息为:

mycontainer | Error: unable to access jarfile myjar.jar

我的docker-compose文件是:

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

运行Spring Boot应用程序的core服务的Dockerfile是这样的:

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无法访问jar文件而失败。我已经尝试在Dockerfile的CMD中指定jar文件的绝对路径,但是从Docker Compose运行时这并没有帮助。

有谁知道可能导致这种情况的原因?我在Windows 10主机上。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

通过在docker-compose中安装来自./core的内容,您似乎正在覆盖/ usr / src / core的内容[将jar文件复制到的位置]。从services-> core->卷中删除下面的mount并尝试一下。 volumes: - './core:/usr/src/core'