📅  最后修改于: 2023-12-03 15:24:39.345000             🧑  作者: Mango
在没有 sudo 特权的情况下运行 docker 可能会是很多程序员都会碰到的问题。为了解决这个问题,我们可以采用以下几个方法。
sudo usermod -aG docker ${USER}
运行以上命令,将当前用户添加到 docker 组中,然后注销并重新登录即可生效。
如果您的内核版本大于或等于 2.6.24,并且您的文件系统支持此特性,则可以使用以下命令。
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/dockerd
该命令将 CAP_NET_BIND_SERVICE 权限分配给 /usr/bin/dockerd,使 dockerd 进程可以侦听低于 1024 的端口。
这种方式的缺点是需要使用到一个额外的守护进程来进行代理,并且有一定的安全风险。
在 /etc/docker/daemon.json 中添加以下配置。
{
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}
启动一个代理进程来将来自 TCP 端口的请求代理到 Unix 套接字。
socat TCP-LISTEN:2375,reuseaddr,fork UNIX-CLIENT:/var/run/docker.sock
使用以下命令来连接 Docker daemon。
docker -H tcp://127.0.0.1:2375 version
以上是在没有 sudo 的情况下运行 docker 的三种方法。我们可以根据自己的实际情况来选择适合自己的方法。如果选择第一种方法,则需要将用户添加到 docker 组中;如果选择第二种方法,则需要使用 Linux capabilities 特性;如果选择第三种方法,则需要使用 tcp 套接字代理的方式。