Docker Error Invalid or corrupt jarfile .jar
阿新 • • 發佈:2018-12-26
零、問題描述
開發環境: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 build
和 docker-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 盤的使用者目錄下了,真是專治各種不服。