Docker Compose Java无法访问jar文件。

5
I'm trying to run a Spring Boot app as one of the services in a Docker Compose setup, but whenever I run docker-compose up -d, the container running the Spring Boot app fails and exits immediately. For purposes of this post, I'm using generic names like "mycontainer" and "myfile".
Running docker-compose logs core shows that the error message is: mycontainer | Error: unable to access jarfile myjar.jar.
My docker-compose file is:
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个回答

8
似乎您正在通过在docker-compose中挂载./core的内容来覆盖/usr/src/core的内容[您将jar文件复制到此处]。从services->core->volumes中删除下面的挂载,并尝试一下。
volumes: - './core:/usr/src/core'

1
是的,没错。我已经意识到问题出在 jar 文件不在我以为的位置(被独立容器运行时的事实误导了我,但那里我没有挂载卷),但我没有机会回答自己的问题。 :) - diekunstderfuge
1
谢谢,兄弟,感谢你的答案,它解决了我困惑的问题,为什么它不起作用。 - Bahramdun Adil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接