我尝试将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主机上。非常感谢任何帮助。
答案 0 :(得分:4)
通过在docker-compose中安装来自./core的内容,您似乎正在覆盖/ usr / src / core的内容[将jar文件复制到的位置]。从services-> core->卷中删除下面的mount并尝试一下。
volumes:
- './core:/usr/src/core'