Docker容器初始化后执行脚本失败:无法识别/bin/bash命令
问题解决:Docker Compose中执行初始化脚本报错"unrecognised command '/bin/bash'"
核心原因
flagsmith/flagsmith:latest镜像内置了自定义的ENTRYPOINT启动脚本,而非默认的shell环境。当你在docker-compose.yml中设置command时,该命令会被当作ENTRYPOINT脚本的参数传入,而非直接作为独立命令执行,因此ENTRYPOINT脚本无法识别/bin/bash这个参数,导致报错。
解决方案
方案1:覆盖ENTRYPOINT为bash并执行脚本
直接将容器的ENTRYPOINT设置为bash,指定要执行的脚本。这种方式会替换原镜像的ENTRYPOINT,若执行完脚本后需要保留容器运行,需在脚本末尾添加原镜像的启动命令(可通过docker inspect flagsmith/flagsmith:latest查看原CMD/ENTRYPOINT):
services: flagsmith: image: flagsmith/flagsmith:latest volumes: - ./init_flagsmith.sh:/init_flagsmith.sh entrypoint: ["/bin/bash"] command: ["/init_flagsmith.sh"]
方案2:用sh -c串联脚本与原启动命令
如果需要执行初始化脚本后继续启动Flagsmith服务,推荐用sh -c将脚本执行和原启动逻辑串联,既保留原镜像的启动流程,又能执行自定义脚本:
services: flagsmith: image: flagsmith/flagsmith:latest volumes: - ./init_flagsmith.sh:/init_flagsmith.sh command: ["sh", "-c", "chmod +x /init_flagsmith.sh && /init_flagsmith.sh && /usr/local/bin/docker-entrypoint.sh"]
注:
/usr/local/bin/docker-entrypoint.sh是Flagsmith镜像默认的ENTRYPOINT脚本路径,若不确定可通过docker inspect flagsmith/flagsmith:latest | grep -A 10 Entrypoint确认。
额外注意事项
- 确保挂载的
init_flagsmith.sh在容器内路径正确,且拥有可执行权限(可在脚本执行前添加chmod +x,或本地先执行chmod +x init_flagsmith.sh)。 - 若脚本需要依赖容器内的环境变量,需确保变量已在
docker-compose.yml的environment字段中正确配置。
内容的提问来源于stack exchange,提问作者BenGee23
相关产品推荐
相关产品推荐

