Docker创建的VirtualBox虚拟机执行Bash脚本报‘bash: not found’求助
解决
docker-machine ssh 执行脚本时 bash: not found 的问题 这个错误很常见,大多是因为你的虚拟机(myvm)里默认没有安装bash——很多轻量Linux发行版比如Alpine,为了精简体积只预装了sh(POSIX标准shell),而不是bash。下面给你几个可行的解决思路:
1. 先用sh执行脚本(最快临时方案)
如果你的脚本没有用到bash独有的语法(比如复杂数组操作、[[ ]]条件判断这类扩展特性),直接把命令里的bash换成sh就行:
docker-machine ssh myvm "sh /scripts/myscript.sh"
2. 在虚拟机里安装bash(长期解决方案)
如果你的脚本依赖bash专属特性,那就先在虚拟机里装上bash。根据虚拟机的系统类型执行对应的安装命令:
- Alpine系统(最可能的情况,很多Docker轻量镜像基于它):
docker-machine ssh myvm "apk add --no-cache bash" - Debian/Ubuntu系统:
docker-machine ssh myvm "apt update && apt install -y bash" - CentOS/RHEL系统:
docker-machine ssh myvm "yum install -y bash" # CentOS 8+ 可以用dnf替代yum docker-machine ssh myvm "dnf install -y bash"
安装完成后,再执行你原来的docker-machine ssh myvm "bash /scripts/myscript.sh"命令就没问题了。
3. 修改脚本的shebang行(适配sh环境)
如果脚本开头写的是#!/bin/bash,可以把它改成#!/bin/sh,这样即使默认shell是sh,脚本也能被正确识别执行。不过要注意:如果脚本里有bash专属语法,这种方法可能会导致脚本运行出错,需要先调整代码兼容POSIX sh规范。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

