如何让Ubuntu 22.04.4服务器上的非root用户使用Docker Compose?
我之前碰到过类似的问题,你已经把userB加入docker组了,但还是出现docker: 'compose' is not a docker command的错误,大概率是Docker Compose插件的权限或者路径配置问题导致的。给你几个具体的排查和解决步骤:
第一步:检查Docker Compose插件的权限
Docker Compose V2是作为Docker CLI插件安装的,默认路径是/usr/libexec/docker/cli-plugins/docker-compose。先切换到userA账号,执行下面的命令查看这个文件的权限:ls -l /usr/libexec/docker/cli-plugins/docker-compose正常的权限应该是
-rwxr-xr-x(所有者、组、其他用户都有读和执行权限)。如果最后三位是---或者--x,说明userB这类非所有者用户没有足够权限访问插件。这时候用root权限修改权限:sudo chmod o+rx /usr/libexec/docker/cli-plugins/docker-compose修改完切换回userB,再试
docker compose version。第二步:确认userB的Docker客户端版本
要是userB的Docker客户端版本太低,可能不支持Compose V2的插件模式。让userB执行下面的命令检查版本:docker version确保客户端版本在20.10.0以上(这个版本开始支持Compose V2插件)。如果版本太低,更新Docker到最新版本:
sudo apt update && sudo apt upgrade docker-ce docker-ce-cli containerd.io sudo systemctl restart docker第三步:检查插件路径的环境变量
Docker CLI默认会找/usr/libexec/docker/cli-plugins/路径,但如果userB的环境变量里设置了DOCKER_CLI_PLUGINS_PATH,可能会覆盖默认路径。让userB执行:echo $DOCKER_CLI_PLUGINS_PATH如果输出不是空的,而且没包含
/usr/libexec/docker/cli-plugins/,就把这个路径加到环境变量里。比如在userB的~/.bashrc文件里加一行:export DOCKER_CLI_PLUGINS_PATH="/usr/libexec/docker/cli-plugins/:$DOCKER_CLI_PLUGINS_PATH"然后执行
source ~/.bashrc生效,再试命令。第四步:排查是否是独立安装的Docker Compose
如果你之前给userA单独装了独立的docker-compose二进制文件(比如放在/home/userA/.local/bin/),那userB的PATH里可能没这个目录。这种情况可以把二进制文件移到全局路径:sudo mv /home/userA/.local/bin/docker-compose /usr/local/bin/ sudo chmod a+x /usr/local/bin/docker-compose这时候userB可以用
docker-compose version(注意是下划线)验证,不过更建议用插件模式,统一用docker compose命令。
备注:内容来源于stack exchange,提问作者Dan Herbert

