I'm trying to run a Spring Boot app as one of the services in a Docker Compose setup, but whenever I run
Running
My docker-compose file is:
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主机上运行。 非常感谢任何帮助。