从远程服务器通过SSH执行docker-compose exec报错的问题咨询
解决SSH远程执行docker-compose exec命令的报错问题
首先一眼就揪出了最明显的问题——你命令里的cmposer是拼写错误!正确的命令应该是composer,这正是导致"executable file not found in $PATH"报错的直接原因。先把这个拼写修正过来试试,比如:
ssh -p 22000 -C -i /home/sportlevel/.ssh/id_rsa -l sportlevel 194.58.107.224 'cd /sportlevel/k4fntr && docker-compose exec -T "app" composer install'
如果改完拼写还是遇到类似问题(虽然大概率这个就是元凶),那就要考虑SSH远程执行时的shell环境差异了:
- 当你直接登录目标服务器时,用的是交互式登录shell,会自动加载
~/.bashrc、~/.profile这类配置文件,PATH变量会包含composer的路径; - 但通过SSH远程执行单条命令时,默认是非交互式非登录shell,不会加载这些环境配置,导致PATH里找不到composer的位置。
这种情况下可以试试这几个方案:
- 使用composer的绝对路径执行:先在目标服务器上用
which composer找到它的绝对路径(比如/usr/local/bin/composer),然后替换命令里的composer:
ssh -p 22000 -C -i /home/sportlevel/.ssh/id_rsa -l sportlevel 194.58.107.224 'cd /sportlevel/k4fntr && docker-compose exec -T "app" /usr/local/bin/composer install'
- 强制远程shell以登录模式运行,让它加载完整环境配置:用
bash -l -c包裹你的命令,确保加载登录时的环境变量:
ssh -p 22000 -C -i /home/sportlevel/.ssh/id_rsa -l sportlevel 194.58.107.224 'bash -l -c "cd /sportlevel/k4fntr && docker-compose exec -T app composer install"'
- 如果是通过Makefile执行,记得同步修正Makefile里的拼写错误,也可以套用上面的绝对路径或登录shell方案。
先优先检查拼写错误,这个低级失误真的很容易被忽略,改完应该就能解决你的问题了!
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

