docker-compose java 无法访问 jarfile
Posted
技术标签:
【中文标题】docker-compose java 无法访问 jarfile【英文标题】:docker-compose java cannot access jarfile 【发布时间】:2018-11-07 10:50:50 【问题描述】:我正在尝试将 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
core
服务的 Dockerfile 是运行 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 的错误。我尝试在 Dockerfile 的 CMD
中指定 jarfile 的绝对路径,但这在从 Docker Compose 运行时无济于事。
有谁知道这可能是什么原因造成的?我在 Windows 10 主机上。非常感谢任何帮助。
【问题讨论】:
【参考方案1】:您似乎通过在 docker-compose.从 services->core->volumes 中删除下面的挂载并尝试一下。
volumes:
- './core:/usr/src/core'
【讨论】:
是的,就是这样。我已经意识到问题在于 jarfile 不在我认为的位置(被运行独立容器时它在那里的事实误导了 - 但我没有安装卷),但我没有有机会回答我自己的问题。 :) 谢谢,兄弟的回答,这让我很困惑为什么它不起作用。以上是关于docker-compose java 无法访问 jarfile的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose:无法从我的 LEMP 堆栈访问 phpMyAdmin
使用docker-compose时无法访问docker容器内的spring-boot rest-endpoint