rie*_*pil 8 java docker junit5 testcontainers localstack
我正在尝试使用 JUnit 5 模块将可执行初始化 bash 脚本复制init.sh到使用 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");
Run Code Online (Sandbox Code Playgroud)
但在创建的 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
Run Code Online (Sandbox Code Playgroud)
我也尝试使用复制此文件,.withClasspathResourceMapping()但这需要一种仅提供READ_ONLY或的绑定模式READ_WRITE。
yup*_*flu 10
您可以使用类的另一个构建器MountableFile,它采用mode带有 posix 文件模式值的参数来更改权限。例如,使脚本仅对所有者可执行:
...
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh", 0744), "/docker-entrypoint-initaws.d/init.sh");
Run Code Online (Sandbox Code Playgroud)
0744是一个八进制文件模式文字,对应于-rwxr--r--权限。
但是,我尝试使用 Localstack 进行相同的配置0.10.8,并且初始化工作甚至没有使脚本可执行。
| 归档时间: |
|
| 查看次数: |
5616 次 |
| 最近记录: |