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 也会出现同样的问题!

Docker Compose Get started Tip > Shared folders, volumes, and bind mounts 一节有提到:Docker Engine 会自动挂载用户目录 C:\Users (Windows) or /Users (Mac)。

然而,自己手动挂载非用户目录下的文件,就会出现这种问题!Windows 和 Mac 会出问题,CentOS 不会

解决方法就是不深究了:以前项目都放 D 盘,现在要用 Docker 跑的都放 C 盘的用户目录下了,真是专治各种不服。

我另外一篇博客,也是讲的类似的问题,Windows 下的 Docker 挂载 Mysql 配置文件导致 Mysql 配置文件不生效的问题:Docker mysql [Warning] World-writable config file ‘.cnf’ is is ignored

附、参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值