You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu20.04终端执行docker正常,运行.sh脚本提示找不到命令如何解决?

问题原因

你的脚本本身没有语法错误,报错是脚本运行时的PATH环境变量没有包含snap软件的执行路径导致的:

  • Ubuntu通过snap安装的软件默认都会把可执行文件放在/snap/bin目录下
  • 你直接打开终端用的是交互式shell,会自动加载~/.bashrc、/etc/profile这类配置文件,这些配置里已经把/snap/bin加入了PATH,所以直接敲docker命令能正常运行
  • 运行shell脚本时用的是非交互式非登录shell,默认不会加载上述用户/全局配置里的PATH扩展,找不到/snap/bin/docker就会报command not found

解决方案

方法1:脚本内指定docker的绝对路径(最快验证)

先执行which docker拿到你docker的实际路径,正常snap安装的输出是/snap/bin/docker,把脚本里所有的docker替换成绝对路径即可:

#!/bin/bash
source $(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh

/snap/bin/docker run -e "NODE_ENV=dev" -it --rm --name my-npm-2 -v $PROJECT_HOME/code:/var/www/html/code -w /var/www/html/code node:14 npm install

/snap/bin/docker run -e "NODE_ENV=dev" -it --rm --name my-npm -v $PROJECT_HOME/code/web:/var/www/html/code/web -w /var/www/html/code/web node:14 npm install

$SCRIPT_HOME/buildjs_dev.sh

/snap/bin/docker exec project_php sudo php -d memory_limit=-1 /usr/local/bin/composer install --working-dir=/var/www/html/code

/snap/bin/docker exec project_php chown -R www-data:www-data /var/www/html/code/var/cache
/snap/bin/docker exec project_php chown -R www-data:www-data /var/www/html/code/var/log

方法2:脚本开头把/snap/bin加入PATH(推荐,通用性好)

在脚本的#!/bin/bash下一行加一句PATH的声明,这样脚本内所有命令都会去/snap/bin下找,不用修改每一处docker调用:

#!/bin/bash
# 把snap的可执行路径加入当前脚本的PATH
export PATH=$PATH:/snap/bin
source $(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh

# 后面原有内容无需修改
docker run -e "NODE_ENV=dev" -it --rm --name my-npm-2 -v $PROJECT_HOME/code:/var/www/html/code -w /var/www/html/code node:14 npm install
docker run -e "NODE_ENV=dev" -it --rm --name my-npm -v $PROJECT_HOME/code/web:/var/www/html/code/web -w /var/www/html/code/web node:14 npm install

$SCRIPT_HOME/buildjs_dev.sh

docker exec project_php sudo php -d memory_limit=-1 /usr/local/bin/composer install --working-dir=/var/www/html/code

docker exec project_php chown -R www-data:www-data /var/www/html/code/var/cache
docker exec project_php chown -R www-data:www-data /var/www/html/code/var/log

方法3:全局修改非交互shell的PATH(一劳永逸,适合所有脚本)

编辑/etc/environment文件,把/snap/bin加到PATH的末尾,修改完重启系统后所有脚本都会自动识别snap安装的命令:

  • 执行命令打开文件:sudo nano /etc/environment
  • 原有内容一般为PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin",修改为PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/snap/bin"
  • 按Ctrl+O保存,Ctrl+X退出,重启系统后生效

内容的提问来源于stack exchange,提问作者Endrit Shabani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:36:03