【发布时间】:2021-01-28 21:17:05
【问题描述】:
给定一个将文件写入/var/lib/app/files 的 Spring Boot 应用程序。
我用 gradle 任务创建了一个 docker 镜像:
./gradlew bootBuildImage --imageName=app:latest
那么,我想在docker-compose使用它:
version: '3.5'
services:
app:
image: app:latest
volumes:
- app-storage:/var/lib/app/files
// ...ports etc
volumes:
app-storage:
这将失败,因为该文件夹是在 docker-compose up 期间创建的,并且归 root 所有,因此应用程序对该文件夹没有写入权限。
快速解决方法是通过指定user: root 以root 运行图像:
version: '3.5'
services:
app:
image: app:latest
user: root # <------------ required
volumes:
- app-storage:/var/lib/app/files
// ...ports etc
volumes:
app-storage:
这很好用,但我不想以root 运行它。我想知道如何实现它?我通常可以创建一个Dockerfile,以创建具有正确所有权和写入权限的所需文件夹。但据我所知,构建包不使用自定义Dockerfile,因此bootBuildImage 不会使用它——对吗?那么我们如何创建可写卷呢?
【问题讨论】:
标签: spring-boot docker docker-compose