如何使用 Testcontainers 将可执行文件复制到 Docker 容器
How to copy executable file to Docker container using Testcontainers
我正在尝试将可执行初始化 bash 脚本 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()
复制此文件,但这采用的绑定模式仅提供 READ_ONLY
或 READ_WRITE
.
您可以使用 MountableFile
class 的另一个 builder,它使用带有 posix 文件模式值的 mode
参数来更改权限。例如,使脚本仅对所有者可执行:
...
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh", 0744), "/docker-entrypoint-initaws.d/init.sh");
0744
是一个八进制文件模式文字,对应于 -rwxr--r--
权限。
但是我尝试使用 Localstack 0.10.8
进行相同的配置并且初始化工作甚至没有使脚本可执行。
我正在尝试将可执行初始化 bash 脚本 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()
复制此文件,但这采用的绑定模式仅提供 READ_ONLY
或 READ_WRITE
.
您可以使用 MountableFile
class 的另一个 builder,它使用带有 posix 文件模式值的 mode
参数来更改权限。例如,使脚本仅对所有者可执行:
...
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh", 0744), "/docker-entrypoint-initaws.d/init.sh");
0744
是一个八进制文件模式文字,对应于 -rwxr--r--
权限。
但是我尝试使用 Localstack 0.10.8
进行相同的配置并且初始化工作甚至没有使脚本可执行。