Mac间使用docker context部署容器提示docker命令不存在问题咨询
问题根因
报错核心原因是SSH非交互登录到远程Enterprise主机时,加载的PATH环境变量缺失Docker二进制所在的/usr/local/bin路径,远程执行docker system dial-stdio时找不到命令,触发127退出码。
Mac上Docker Desktop默认将可执行文件软链到/usr/local/bin目录:本地交互登录Enterprise时,shell会加载.zshrc、.zprofile等交互配置文件,将/usr/local/bin加入PATH,因此执行docker命令正常;但通过SSH非交互模式执行单条命令时,不会加载上述交互配置,就会出现SSH执行命令返回的PATH缺少/usr/local/bin的现象。
解决方法
任选以下一种方案即可修复:
- 方案1:配置SSH用户环境变量
登录Enterprise主机,编辑/etc/ssh/sshd_config文件,找到PermitUserEnvironment配置项,取消注释并将值改为yes,保存后执行以下命令重启SSH服务:
之后在rafaelguerra用户家目录创建sudo systemsetup -setremotelogin off && sudo systemsetup -setremotelogin on~/.ssh/environment文件,写入以下内容:
配置完成后回到Defiant侧重新执行docker命令即可。PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin - 方案2:创建docker context时显式指定远程docker绝对路径
在Defiant上删除原有异常的context,重新创建时指定远程docker的执行路径:
切换到新创建的context后即可正常执行容器操作命令。docker context rm enterprise docker context create enterprise --docker "host=ssh://rafaelguerra@Enterprise.local",exec-path=/usr/local/bin/docker - 方案3:给非交互zsh补全PATH配置
登录Enterprise主机,在rafaelguerra用户家目录编辑.zshenv文件(zsh非交互模式会默认加载该文件),加入以下配置:
保存后无需重启服务,直接回到Defiant侧测试docker命令即可。export PATH="/usr/local/bin:$PATH"
内容的提问来源于stack exchange,提问作者Rafael Guerra
相关产品推荐
相关产品推荐

