我正在开发一个SpringBoot应用程序,它应该被迁移到docker容器(用于在服务器上作为系统服务运行)中,应用程序在文件系统上读写一个可配置的路径——现在假设是这样 /var/mypath
我用 bootBuildImage
来自springs gradle插件的任务。它使用了默认的生成器图像,即 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引导应用程序在上没有写访问权限 /var/mypath
. 我发现,显然cnb构建让spring应用程序以用户身份运行 cnb
. 我想,卷是作为root创建的,只有root有对它的写访问权。
手动chown方法似乎不太理想,因为我本以为可以 docker-compose up
在服务器上完成,而不是手动闲逛,但无论如何:我已经尝试了 chown
从容器中向cnb用户发送的卷未成功:
chown cnb/var/mypath/chown:更改“/var/mypath/”的所有权:不允许操作
如何确保spring启动应用程序可以写入卷?
1条答案
按热度按时间n3ipq98p1#
毕竟,我设法chown/chgrp了这个卷-我的错误是它不能在容器内工作(没有sudo)-但是它可以在外部使用docker exec工作,指定根用户:
user@stuck还提出了一种更为复杂的方法,即创建另一个docker映像层:“bootbuildimage”能否创建可写卷?
来自spring的andywilkinson指出,这是一个通用的docker问题——因此,如果将来出现其他解决方案,我很高兴更新这个问题。