我试图学习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)来完成的。
以我为例(Linux Mint 17),我做了各种各样的事情,我不确定其中哪些是完全必要的。
我将丢失的Ubuntu包包括在内:
$ sudo apt-get install apparmor lxc cgroup-lite
日志含义向组docker添加用户。
$ sudo usermod -aG docker ${USER}
启动守护进程(openSUSE只需要这个)
$ sudo docker -d
谢谢\归因
谢谢乌斯曼·伊斯梅尔,因为也许这只是最后一件事…
愚蠢的问题,你启动docker守护程序了吗?- Usman Ismail 12月17日15:04
还要感谢github@MichaelJCole为我提供的解决方案,因为当我阅读乌斯曼的评论时,我没有检查守护进程。
GitHub的评论:
sudo apt-get install apparmor lxc cgroup-lite
sudo apt-get install docker.io
# If you installed docker.io first, you'll have to start it manually
sudo docker -d
sudo docker run -i -t ubuntu /bin/bash
感谢fredjean.net的帖子注意到丢失的包,忘记了默认的Ubuntu安装说明和谷歌关于其他方法
在Linux Mint上,缺省情况下没有安装cgroup-lite和lxc包。安装这两个程序后,我可以在基本映像中运行bash,然后构建并运行我的映像。
感谢brettof86对openSUSE的评论