从源代码构建 kubernetes 时无法连接到 'docker' 守护进程

Can't connect to 'docker' daemon on building kubernetes from source

我试图从源代码构建 kubernetes: https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/getting-started-guides/binary_release.md#building-from-source

我在 ubuntu 上安装了 docker。

royalharsh95@ubuntu:~$ sudo docker version

Client version: 1.0.1

Client API version: 1.12

Go version (client): go1.2.1

Git commit (client): 990021a

Server version: 1.0.1

Server API version: 1.12

Go version (server): go1.2.1

Git commit (server): 990021a

我在 sudo service docker start 之后尝试过,但得到了同样的错误。

royalharsh95@ubuntu:~$ cd kubernetes

royalharsh95@ubuntu:~/kubernetes$ make release

build/release.sh

+++ Verifying Prerequisites....

Can't connect to 'docker' daemon.  please fix and retry.

Possible causes:

- On Mac OS X, boot2docker VM isn't installed or started

- On Mac OS X, docker env variable isn't set appropriately. Run:
      $(boot2docker shellinit)

 - On Linux, user isn't in 'docker' group.  Add and relogin.
    - Something like 'sudo usermod -a -G docker royalharsh95'
    - RHEL7 bug and workaround: https://bugzilla.redhat.com/show_bug.cgi?id=1119282#c8
  - On Linux, Docker daemon hasn't been started or has crashed

make: *** [release] Error 1

您遇到的问题是由于您无法以非 root 用户身份访问 Docker 套接字 /var/run/docker.sock 而引起的。当您 运行 sudo docker version 时,您 运行 将 Docker 客户端 设置为 root,因此它不会遇到此问题。

这是一个基本的 Unix 权限问题,有标准的解决方案:

  • 您可以 运行 Kubernetes 构建为 rootsudo make release
  • 您可以修复套接字的权限,这样您就可以在没有 sudo 的情况下使用 Docker。

如果您查看 Docker 套接字上的权限,您可能会看到如下内容:

$ ls -l /var/run/docker.sock /var/run/docker.sock
srw-rw----. 1 root docker 0 Mar 17 12:26 /var/run/docker.sock

这显示了 rootdocker 组成员可读的套接字。在这种情况下,我是 docker 组的成员,因此我可以 运行 docker 客户端而无需 sudo。您可以在您的环境中设置相同的东西。

请注意,当然您始终需要以 root 身份启动 Docker 守护程序,但通常您希望将其配置为在系统启动时自动启动,而不是手动启动。