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

Kir*_*ill 9 java unit-testing docker testcontainers

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

container.withClassPathResourceMapping(
  "/path/to/res",
  "/etc/app/config.name",
  BindMode.READ_ONLY
)
Run Code Online (Sandbox Code Playgroud)

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

container.copyFileToContainer(
 Transferable.of(bin /* byte[] */),
 "/var/app/resource.name"
)
Run Code Online (Sandbox Code Playgroud)

app:app该应用程序作为在Dockerfile.

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

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

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

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