Java 如何使用Testcontainers将可执行文件复制到Docker容器
我正在尝试将可执行初始化bash脚本Java 如何使用Testcontainers将可执行文件复制到Docker容器,java,docker,junit5,testcontainers,localstack,Java,Docker,Junit5,Testcontainers,Localstack,我正在尝试将可执行初始化bash脚本init.sh复制到使用JUnit 5模块使用Testcontainers(1.13.0)创建的Localstack Docker容器中: @Container static LocalStackContainer localStack = new LocalStackContainer("0.10.0") .withServices(S3) .withCopyFileToContainer(MountableFile.forClasspathReso
init.sh
复制到使用JUnit 5模块使用Testcontainers(1.13.0)创建的Localstack Docker容器中:
@Container
static LocalStackContainer localStack = new LocalStackContainer("0.10.0")
.withServices(S3)
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh"), "/docker-entrypoint-initaws.d/init.sh");
但是在创建的Docker容器中,文件缺少执行权限(通过使用Docker exec-it ID/bin/sh
查看文件权限进行检查)
在我的计算机上,该文件具有以下权限:
$ ls -al
total 16
drwxr-xr-x 4 xyz staff 128 Apr 16 20:51 .
drwxr-xr-x 4 xyz staff 128 Apr 16 08:43 ..
-rw-r--r-- 1 xyz staff 135 Apr 16 20:14 application.yml
-rwxr-xr-x 1 xyz staff 121 Apr 16 20:51 init.sh
我还尝试使用.withClasspathResourceMapping()
复制此文件,但这采用的是绑定模式,该模式仅提供只读
或读写
您可以使用另一个可装载文件
类,该类使用带有posix文件模式值的模式
参数来更改权限。例如,使脚本仅可供所有者执行:
...
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh", 0744), "/docker-entrypoint-initaws.d/init.sh");
0744
是一个八进制文件模式文字,对应于-rwxr--r--
权限
然而,我尝试了使用Localstack0.10.8
的相同配置,初始化工作甚至没有使脚本可执行