1. 程式人生 > >Docker Error Invalid or corrupt jarfile .jar

Docker Error Invalid or corrupt jarfile .jar

零、問題描述

開發環境:Windows8.1

專案:Java Spring Boot 專案

Docker 環境:Docker Toolbox。不是 Windows10,用不了 Docker for Windows 只能用這個。

使用 Docker Compose 編排服務,並啟動 Mysql 和 Spring Boot 專案。

docker-compose.yml 檔案內容:

version: '2'

services:
  mysql:
    build: ./docker/builds/mysql
    ports:
      - "3386:3306"
    volumes:
      - "./docker/data/mysql/data:/var/lib/mysql"
- "./docker/data/mysql/conf:/etc/mysql/conf.d" restart: always environment: MYSQL_DATABASE: testdb MYSQL_USER: kinginblue MYSQL_PASSWORD: kinginblue MYSQL_ROOT_PASSWORD: kinginblue api: depends_on: - mysql build: ./docker/builds/api ports: - "8088:8080"
volumes: - "./api/target/api-0.0.1-SNAPSHOT.jar:/app/api.jar" entrypoint: - "java" - "-jar" - "/app/api.jar" restart: always

然而,docker-compose builddocker-compose up -d 啟動之後,docker-compose logs -f api 檢視日誌,發現錯誤提示如下:

Error: Invalid or corrupt jarfile /app/api.jar

提示 Jar 包無效或損壞。

一、解決方案

經查,並不是 Jar 包無效或損壞。而是 Windows 的鍋。同樣的 jar 包同樣的 docker-compose.yml 在伺服器上的 CentOS 下是沒有問題的!

因為我的專案是在 D:\IdeaWorkspace\ 下,是 Windows volumes 掛載出了問題!

雖然我的是 Windows8.1 的 Docker Toolbox,經測,Docker for Mac 也會出現同樣的問題!

然而,自己手動掛載非使用者目錄下的檔案,就會出現這種問題!Windows 和 Mac 會出問題,CentOS 不會

解決方法就是不深究了:以前專案都放 D 盤,現在要用 Docker 跑的都放 C 盤的使用者目錄下了,真是專治各種不服。

附、參考資料