代码之家  ›  专栏  ›  技术社区  ›  Merve Sahin Artavazd Balayan

Docker无法访问jar文件

  •  3
  • Merve Sahin Artavazd Balayan  · 技术社区  · 6 年前

    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
    
    1 回复  |  直到 6 年前
        1
  •  6
  •   trust512    6 年前

    我没看到你在复制 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"