java - 如何使用 Testcontainers 将可执行文件复制到 Docker 容器
问题描述
我正在尝试init.sh
使用 JUnit 5 模块将可执行的初始化 bash 脚本复制到使用 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
它mode
使用带有 posix 文件模式值的参数来更改权限。例如,使脚本仅对所有者可执行:
...
.withCopyFileToContainer(MountableFile.forClasspathResource("init.sh", 0744), "/docker-entrypoint-initaws.d/init.sh");
0744
是对应于-rwxr--r--
权限的八进制文件模式文字。
但是,我尝试了与 Localstack 相同的配置,0.10.8
并且初始化工作甚至没有使脚本可执行。
推荐阅读
- flutter - 不良状态:意外诊断:颤振升级到 1.20.1 后
- python-3.x - 将字典写入csv中的单行
- tensorflow - Rust 中的 TensorFlow,未解决的导入
- postgresql - Postgres 连接未关闭 - 休眠
- python - 如何动态访问新的数据框(熊猫管道)?
- python - 子集数据并在传递前存储,使用 loc
- events - 如何更新与另一个聚合有关联的聚合的 ReadModel
- grafana - Graphite divideSeries(#E,#A) 不返回数据
- matplotlib - 创建 matplotlib 子图并调用 np.random.multivariate_normal 时出现“SVD 不收敛”错误
- php - 此集合实例上不存在属性 [firstName]