Localstack入口脚本在Linux/Mac正常运行,Windows下报错如何解决?
解决Windows Docker环境下Localstack初始化脚本执行异常问题
核心原因
Windows默认保存的Shell脚本是CRLF换行符,加上如果没指定脚本解释器,Localstack容器可能会错误解析脚本内容——把换行符当成命令的一部分,甚至用错误的执行器(比如CMD)来跑Shell脚本,导致桶名参数被异常解析,触发正则校验失败。
解决方案
1. 给脚本添加Shebang行
在my_script.sh的最开头加上指定解释器的行,强制容器用Bash执行脚本:
#!/bin/bash aws --endpoint-url=http://localhost:4566 s3 mb s3://my-bucket
2. 转换脚本换行符为LF格式
Windows默认的CRLF换行符在Linux容器里会被当成命令的一部分(比如桶名末尾多了\r字符),必须转成Linux标准的LF:
- 用VS Code的话,点击右下角的
CRLF,切换为LF后保存文件 - 用Git的话,执行
git config --global core.autocrlf false,然后重新保存或拉取脚本文件 - 用命令行工具的话,安装dos2unix后执行
dos2unix my_script.sh转换格式
3. 在docker-compose.yml里显式指定执行方式
如果前两步还是不行,直接在Localstack服务配置里强制用Bash执行脚本:
services: localstack: image: localstack/localstack volumes: - ./my_script.sh:/docker-entrypoint-initaws.d/my_script.sh # 先执行脚本,再启动Localstack默认服务 entrypoint: ["sh", "-c", "bash /docker-entrypoint-initaws.d/my_script.sh && /usr/local/bin/docker-entrypoint.sh"] # 保留你的其他配置(端口、环境变量等)
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

