Docker无法访问jar文件
Posted
技术标签:
【中文标题】Docker无法访问jar文件【英文标题】:Docker unable to access jar file 【发布时间】:2018-10-17 09:10:36 【问题描述】:docker 容器无法访问通过挂载点/my/project/dir
访问的 jar 文件。
我确定这不是权限问题,因为我在本地更改了访问权限,所以它应该能够读/写/执行它。
这是Dockerfile
:
FROM tomcat:9-jre8
RUN apt-get update && apt-get install librrds-perl rrdtool -y
VOLUME ["/data/rrdtool", "/my/project/dir"]
ENTRYPOINT [ "java","-jar","/my/project/dir/build/libs/spring-project-0.1.0.jar" ]
这是docker-compose.yml
文件:
version: '2'
services:
db:
container_name: db1
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: password123
MYSQL_USER: user123
MYSQL_PASSWORD: pasw
MYSQL_DATABASE: mydb
expose:
- "3307"
db2:
container_name: db2
image: mysql:8
restart: always
environment:
MYSQL_ROOT_PASSWORD: password123
MYSQL_USER: user123
MYSQL_PASSWORD: pasw
MYSQL_DATABASE: mydb2
expose:
- "3308"
spring:
container_name: spring-boot-project
build:
context: ./
dockerfile: Dockerfile
links:
- db:db1
- db2:db2
depends_on:
- db
- db2
expose:
- "8081"
ports:
- "8081:8081"
restart: always
这是docker-compose logs spring
的输出:
Error: Unable to access jarfile /my/project/dir/build/libs/spring-project-0.1.0.jar
【问题讨论】:
这很难在没有看到任何错误消息的情况下回答。你能运行docker-compose logs spring
并发布输出吗?
你确定你在卷/my/project/dir
中有build/libs/spring-project-0.1.0.jar
吗?
@mbuechmann 我添加了日志
@BukharovSergey 我很确定它存在。当我在本地机器上运行java -jar /my/project/dir/build/libs/spring-project-0.1.0.jar
时,应用程序就会启动。
【参考方案1】:
我没有看到您将jar
复制到任何地方的容器中。您应该尝试将 VOLUME
声明从 Dockerfile
移动到 compose
文件到 spring
服务中,如下所示:
volumes:
- /my/project/dir:/app
然后在 Dockerfile 中你应该指向目录:
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
稍后,如果您想部署它(例如),您应该将项目文件直接复制到映像中,而不是使用volumes
方法。所以在Dockerfile
你会这样做:
COPY . /app
而不是VOLUME [..]
把它们放在一起:
发展:
Dockerfile:
FROM tomcat:9-jre8
RUN apt-get update && apt-get install librrds-perl rrdtool -y
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
撰写文件:
version: '2'
services:
[..]
spring:
container_name: spring-boot-project
build: .
links:
- db:db1
- db2:db2
depends_on:
- db
- db2
ports:
- "8081:8081"
restart: always
volumes:
- /my/project/dir:/app
部署:
Dockerfile(位于项目文件夹中,docker build 要求其构建上下文位于当前目录中):
FROM tomcat:9-jre8
RUN apt-get update && apt-get install librrds-perl rrdtool -y
COPY . /app
ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
撰写文件:
version: '2'
services:
[..]
spring:
container_name: spring-boot-project
build: .
links:
- db:db1
- db2:db2
depends_on:
- db
- db2
expose:
- "8081"
【讨论】:
这成功了!我也试图复制它,但没有成功。我跟着这个教程spring.io/guides/gs/spring-boot-docker 我现在正在编写一个编辑,使COPY
方法更有用,因为我使用了一个小快捷方式来说明它。以上是关于Docker无法访问jar文件的主要内容,如果未能解决你的问题,请参考以下文章