Docker无法访问jar文件 [英] Docker unable to access jar file

查看:141
本文介绍了Docker无法访问jar文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

泊坞窗容器无法访问通过挂载点/my/project/dir 访问的jar文件.我确信这不是权限问题,因为我在本地更改了访问权限,因此它应该能够读取/写入/执行它.

The docker container is not able to access the jar file, that is being accessed over the mount point /my/project/dir. I am certain it is not a permission issue, because I changed the access rights locally, so it should be able to read/write/execute it.

这是 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

推荐答案

我看不到您将 jar 复制到容器中的任何位置.您应该尝试将 VOLUME 声明从 Dockerfile 移到 compose 文件到 spring 服务中,如下所示:

I don't see you copying the jar into the container anywhere. You should try moving a VOLUME declaration from Dockerfile to the compose file into the spring service like this:

  volumes:
    - /my/project/dir:/app

然后在Dockerfile中,您应指向目录:

And then inside Dockerfile you should point to the dir:

ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]

例如,如果以后要部署它,则应将项目文件直接复制到映像中,而不要使用 volumes 方法.因此,您可以在 Dockerfile 中执行以下操作:

Later on if you'd like to deploy it (for example) you should copy the project files directly into the image instead of utilizing the volumes approach. So in Dockerfile you'd then do:

COPY . /app

而不是 VOLUME [..]

将它们放在一起:

发展情况:

Dockerfile:

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要求其构建上下文位于当前目录中)

Dockerfile (that is placed inside project's folder, docker build requires it's build context to be in a current directory):

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"

这篇关于Docker无法访问jar文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆