对cnb docker映像的卷进行写访问

vql8enpb  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(269)

我正在开发一个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启动应用程序可以写入卷?

n3ipq98p

n3ipq98p1#

毕竟,我设法chown/chgrp了这个卷-我的错误是它不能在容器内工作(没有sudo)-但是它可以在外部使用docker exec工作,指定根用户:

docker exec -u 0 -it backend_app chown cnb /var/mypath
docker exec -u 0 -it backend_app chgrp cnb /var/mypath

user@stuck还提出了一种更为复杂的方法,即创建另一个docker映像层:“bootbuildimage”能否创建可写卷?
来自spring的andywilkinson指出,这是一个通用的docker问题——因此,如果将来出现其他解决方案,我很高兴更新这个问题。

相关问题