【发布时间】:2021-04-27 09:05:34
【问题描述】:
我正在开发一个应该迁移到 docker 容器中的 spring boot 应用程序(用于在服务器上作为 systemd 服务运行)
该应用程序在文件系统上读取和写入一个可配置的路径 - 现在假设它是 /var/mypath
我使用 springs gradle 插件中的 bootBuildImage 任务构建了一个 docker 映像。它使用看似默认的构建器映像,即gcr.io/paketo-buildpacks/builder 来构建应用程序映像。
因此,在 docker compose 文件中,我定义了一个堆栈,其中包含(不重要的)mysql db 和 spring boot 应用程序,如下所示:
version: "3.8"
services:
backend_db:
container_name: "backend_db"
image: "mariadb:latest"
# ...
backend_app:
depends_on:
- "backend_db"
container_name: "backend_app"
image: "myImageName:latest"
restart: always
ports:
- 8080:8080
volumes:
- "app:/var/mypath"
environment:
# mysql data etc...
volumes:
db:
app:
当我使用docker-compose up 启动它时,spring-boot 应用程序没有/var/mypath 的写入权限。
我发现,显然 CNB 构建使 Spring 应用程序以用户 cnb 运行。
我想,该卷是以 root 身份创建的,并且只有 root 可以对其进行写访问。
手动 chown 方法似乎不是最理想的,因为我本来希望能够在服务器上只 docker-compose up 并完成,而不是手动 chown 但无论如何:
我曾尝试从容器内将卷 chown 发送给 cnb 用户,但没有成功:
chown cnb /var/mypath/ chown:更改“/var/mypath/”的所有权:不允许操作
如何确保 spring boot 应用程序可以写入卷?
【问题讨论】:
标签: spring-boot docker-compose docker-volume