使用 testcontainers 复制资源时更改文件的所有者

问题描述

我在 Java 测试中使用 testcontainers。要在容器中配置应用程序,我需要放置和挂载配置文件:有些文件是静态的,因此我在创建新容器时使用 withClassPathResourceMapping 挂载它们:

container.withClassPathResourceMapping(
  "/path/to/res","/etc/app/config.name",BindMode.READ_ONLY
)

其他文件是动态生成的,可能会被容器中的应用程序覆盖,因此我在容器启动后使用 copyFiletoContainer内容复制到容器中:

container.copyFiletoContainer(
 Transferable.of(bin /* byte[] */),"/var/app/resource.name"
)

应用以 app:app 中定义的 Dockerfile 用户和组的身份在容器中运行。

我这里有两个类似的问题:

  1. withClassPathResourceMapping 操作会在未找到时创建丢失的目录,例如"/etc/app/config.name" 的类路径映射创建 "/etc/app/ 目录。但它以 root:root 用户身份创建这些目录,因此应用以后无法在此目录中创建新文件
  2. 使用 copyFiletoContainer 复制到容器中的文件不是只读的,可以由应用程序修改。但 copyFiletoContainerroot:root 用户身份创建文件,因此应用无法写入这些文件

我尝试在容器启动后执行 chown -R /path,但此命令失败,因为 exec 用户不是 root

在测试容器中设置所有者和权限的正确方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)