我试图学习Docker,但我一直收到(对我来说)神秘的错误消息。

可能最简单的例子是试图打印我安装的Docker版本:

$ sudo docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.16/version:
    dial unix /var/run/docker.sock: no such file or directory.
    Are you trying to connect to a TLS-enabled daemon without TLS?

我刚刚浏览了用户指南并严格遵循了每一步,所以我很惊讶我得到了这个消息……我现在该怎么办?

我刚刚注意到,如果我不使用sudo,我不会得到错误:

$ docker version
Client version: 1.4.1
Client API version: 1.16
Go version (client): go1.3.3
Git commit (client): 5bc2ff8
OS/Arch (client): darwin/amd64
Server version: 1.4.1
Server API version: 1.16
Go version (server): go1.3.3
Git commit (server): 5bc2ff8

当然,这不是一个解决方案,因为我可能需要在某个地方使用sudo。

我刚发现另一个页面说“如果你使用OS X,那么你不应该使用sudo。”我不知道他们是指这个例子,还是一般情况。


当前回答

突出的问题很简单——缺少对/var/run/docker的权限。Sock Unix域套接字。

摘自Docker 1.6.0命令行参考的Daemon socket选项章节:

默认情况下,unix域套接字(或IPC套接字)在 /var/run/docker.Sock,需要root权限或docker 组成员。

在Fedora的Docker安装说明中很好地描述了授予用户权限的必要步骤:

赋予用户使用Docker的权限 docker命令行工具 通过套接字文件联系docker守护进程 /var/run/docker.root拥有的袜子:root。尽管建议这样做 对于docker命令,如果用户希望避免使用sudo,可以使用sudo 管理员可以创建一个属于自己的docker组 /var/run/docker.Sock,并将用户添加到该组。 $ sudo groupadd docker $ sudo chown root:docker /var/run/docker.sock $ sudo usermod -a -G docker $USERNAME

注销并重新登录以使上述更改生效。 请注意,一些Linux发行版(Ubuntu)的Docker包已经放置了/var/run/ Docker。在docker组中插入代码,使上述前两个步骤变得不必要。

在OS X和boot2docker的情况是不同的;Docker守护进程运行在虚拟机内部,所以DOCKER_HOST环境变量必须设置为这个虚拟机,这样Docker客户端才能找到Docker守护进程。这是通过在shell中运行$(boot2docker shellinit)来完成的。

其他回答

对我来说,以下步骤是有效的:

我注意到,运行docker运行hello-world失败与这个袜子错误的问题,但运行sudo docker运行hello-world工作。 我将我的当前用户添加到docker组,sudo adduser user docker。然后必须重新启动计算机或使用su - user(如果在docker组中,请使用groups命令检查)。

在那之后,hello-world开始工作。

我的答案是基于我如何使用docker没有sudo?这就解释了问题所在。


另一个可能的原因是您的BIOS CPU可视化没有启用。先去启用它吧!

我也有同样的问题。一个简单的服务docker重启就解决了这个问题。

在Ubuntu上安装lxc-docker后,你需要将你的用户添加到docker用户组:

sudo usermod -a -G docker myusername

这是因为套接字文件的权限:

srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock

不要运行usermod没有“-a”,就像在其他评论中建议的那样,否则它会擦除你的额外组设置,只会离开“docker”组

事情是这样的:

➜  ~  id pawel
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare),998(docker)
➜  ~  usermod -G docker pawel
➜  ~  id pawel               
uid=1000(pawel) gid=1000(pawel) groups=1000(pawel),998(docker)

确保有

127.0.0.1    localhost

在你的

`/etc/hosts `

文件。