📌  相关文章
📜  如何在没有 sudo 的情况下运行 docker - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:24:39.345000             🧑  作者: Mango

如何在没有 sudo 的情况下运行 docker

在没有 sudo 特权的情况下运行 docker 可能会是很多程序员都会碰到的问题。为了解决这个问题,我们可以采用以下几个方法。

1. 将用户添加到 docker 组中
sudo usermod -aG docker ${USER}

运行以上命令,将当前用户添加到 docker 组中,然后注销并重新登录即可生效。

2. 使用 Linux capabilities 特性

如果您的内核版本大于或等于 2.6.24,并且您的文件系统支持此特性,则可以使用以下命令。

sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/dockerd

该命令将 CAP_NET_BIND_SERVICE 权限分配给 /usr/bin/dockerd,使 dockerd 进程可以侦听低于 1024 的端口。

3. 使用 tcp 套接字代理的方式

这种方式的缺点是需要使用到一个额外的守护进程来进行代理,并且有一定的安全风险。

3.1 在 Docker daemon 中添加配置

在 /etc/docker/daemon.json 中添加以下配置。

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

3.2 启动代理进程

启动一个代理进程来将来自 TCP 端口的请求代理到 Unix 套接字。

socat TCP-LISTEN:2375,reuseaddr,fork UNIX-CLIENT:/var/run/docker.sock

3.3 连接 Docker daemon

使用以下命令来连接 Docker daemon。

docker -H tcp://127.0.0.1:2375 version
总结

以上是在没有 sudo 的情况下运行 docker 的三种方法。我们可以根据自己的实际情况来选择适合自己的方法。如果选择第一种方法,则需要将用户添加到 docker 组中;如果选择第二种方法,则需要使用 Linux capabilities 特性;如果选择第三种方法,则需要使用 tcp 套接字代理的方式。