Docker构建失败提示权限拒绝,是否需root/sudo权限?
你碰到的这个权限拒绝问题,根源是当前用户jack没有访问Docker守护进程套接字/var/run/docker.sock的权限。确实不一定非要每次用root身份操作,这里给你两个常用的解决思路:
方式一:将用户加入docker组(推荐长期使用)
这是最方便的解决方案,以后执行Docker命令都不用再加sudo:
- 首先执行这条命令,把当前用户添加到docker用户组:
sudo usermod -aG docker $USER - 注意:执行完后必须退出当前终端会话,再重新登录(或者临时执行
newgrp docker让变更立刻生效,但重启会话是最稳妥的方式) - 重新登录后,再运行
docker build -t my-app .就不会再出现权限问题了
方式二:临时使用sudo执行命令
如果只是临时操作,不想修改用户组,直接在Docker命令前加上sudo即可:
sudo docker build -t my-app .
不过这种方式每次执行Docker相关命令都需要输入sudo密码,长期用起来比较繁琐。
补充说明
Docker守护进程默认是以root用户运行的,它的套接字文件/var/run/docker.sock的权限属于root:docker组,所以只有root用户或者docker组内的用户才能正常访问这个套接字,这就是你遇到权限拒绝的核心原因。
[jack@localhost work]$ docker build -t my-app .
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/build?buildargs=%7B%7D&buildbinds=null&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=my-app&ulimits=null : dial unix /var/run/docker.sock: connect: permission denied
[jack@localhost work]$ service docker status
内容的提问来源于stack exchange,提问作者jack.hamper

