LocalStack TestContainer初始化脚本未执行问题求助
解决LocalStack TestContainer初始化脚本未执行的问题
1. 修正资源映射路径
你的脚本实际位于classpath:localstack/init.sh,但当前配置的路径与实际位置不匹配,导致容器无法找到脚本。需要调整withClasspathResourceMapping的源路径:
@Container static LocalStackContainer localStack = new LocalStackContainer(DockerImageName.parse("localstack/localstack")) // 直接使用类路径下的相对路径,无需./前缀 .withClasspathResourceMapping("localstack/init.sh", "/etc/localstack/init/ready.d/init.sh", BindMode.READ_ONLY) .withServices(LocalStackContainer.Service.SQS, LocalStackContainer.Service.S3) .waitingFor(Wait.forLogMessage("Initialized.", 1));
注意:withClasspathResourceMapping的第一个参数是类路径根目录下的相对路径,因为你的脚本在src/test/resources/localstack/下,对应classpath根目录的localstack/init.sh。
2. 确保脚本具备可执行权限
LocalStack要求初始化脚本拥有执行权限,可通过两种方式配置:
- 构建时配置(以Maven为例):在pom.xml中添加资源权限设置
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <executions> <execution> <id>copy-resources</id> <phase>process-test-resources</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${project.build.testOutputDirectory}/localstack</outputDirectory> <resources> <resource> <directory>src/test/resources/localstack</directory> <includes> <include>init.sh</include> </includes> <filtering>false</filtering> <fileMode>755</fileMode> </resource> </resources> </configuration> </execution> </executions> </plugin>
- 代码中显式设置:在TestContainer配置中添加命令给容器内脚本加权限
.withCommand("/bin/sh", "-c", "chmod +x /etc/localstack/init/ready.d/init.sh && docker-entrypoint.sh")
3. 确认LocalStack初始化目录的正确性
LocalStack不同版本的初始化目录有差异:
- 新版本(v2+)推荐使用
/etc/localstack/init/ready.d/:服务就绪后执行脚本,能确保awslocal命令可用 - 旧版本可能使用
/docker-entrypoint-initaws.d/:容器启动时执行,部分场景下服务未就绪会导致awslocal命令失败
优先选择/etc/localstack/init/ready.d/目录。
4. 调试排查脚本执行问题
若脚本仍未执行,可通过以下方式定位问题:
- 查看容器日志:直接打印容器日志或手动执行
docker logs <容器ID>查看输出 - 检查脚本是否存在:进入容器执行
docker exec -it <容器ID> ls -l /etc/localstack/init/ready.d/ - 手动执行脚本:进入容器执行
docker exec -it <容器ID> sh /etc/localstack/init/ready.d/init.sh,查看是否有报错信息
内容的提问来源于stack exchange,提问作者zouroto
相关产品推荐
相关产品推荐

