Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Docker无法访问jar文件_Java_Docker_Spring Boot_Jar_Docker Compose - Fatal编程技术网

Java Docker无法访问jar文件

Java Docker无法访问jar文件,java,docker,spring-boot,jar,docker-compose,Java,Docker,Spring Boot,Jar,Docker Compose,docker容器无法访问通过装入点访问的jar文件/my/project/dir。 我确信这不是权限问题,因为我在本地更改了访问权限,所以它应该能够读取/写入/执行它 这是Dockerfile: FROM tomcat:9-jre8 RUN apt-get update && apt-get install librrds-perl rrdtool -y VOLUME ["/data/rrdtool", "/my/project/dir"] ENTRYPOINT [ "java"

docker容器无法访问通过装入点访问的jar文件
/my/project/dir
。 我确信这不是权限问题,因为我在本地更改了访问权限,所以它应该能够读取/写入/执行它

这是
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
复制到容器中。您应该尝试将
声明从
Dockerfile
移动到
compose
文件,然后像这样移动到
spring
服务中:

  volumes:
    - /my/project/dir:/app
然后在Dockerfile中,您应该指向目录:

ENTRYPOINT [ "java","-jar","/app/build/libs/spring-project-0.1.0.jar" ]
稍后,如果您想部署它(例如),您应该将项目文件直接复制到映像中,而不是使用
方法。因此,在
Dockerfile
中,您将执行以下操作:

COPY . /app
而不是
卷[…]

将所有内容放在一起:

发展:

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
version: '2'
services:
    [..]
    spring:
       container_name: spring-boot-project
       build: .
       links:
         - db:db1
         - db2:db2
       depends_on:
         - db
         - db2
       expose:
         - "8081"
部署:

Dockerfile(位于项目文件夹中,docker build要求其生成上下文位于当前目录中):

撰写文件:

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
version: '2'
services:
    [..]
    spring:
       container_name: spring-boot-project
       build: .
       links:
         - db:db1
         - db2:db2
       depends_on:
         - db
         - db2
       expose:
         - "8081"

如果不看到任何错误消息,很难回答此问题。您能运行
docker compose logs spring
并发布输出吗?您确定卷
/my/project/dir
中有
build/libs/spring-project-0.1.0.jar
logs@BukharovSergey我非常肯定它的存在。当我在本地机器上运行
java-jar/my/project/dir/build/libs/spring-project-0.1.0.jar
时,应用程序启动了。这成功了!我也试图复制它,但没有成功。我遵循了本教程,现在我正在编写一个编辑,使
COPY
方法更有用,因为我使用了一个小快捷方式来说明它。