我正在尝试了解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?
我刚刚经历user guide并完全遵循每一步,所以我很惊讶我收到了这条消息......我现在该怎么办?
我刚注意到,如果我不使用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
......
我刚发现another page说“如果您使用的是OS X ,则不应使用sudo
。”我不知道它们是仅仅代表那个例子,还是一般。
答案 0 :(得分:149)
对我来说,运行$(boot2docker shellinit 2> /dev/null)
解决了问题。
这会在当前终端会话中运行boot2docker shellinit
命令(三个set -x ...
行)的输出,这使docker
命令知道在哪里可以找到boot2docker虚拟机。 / p>
将$(boot2docker shellinit 2> /dev/null)
添加到~/.bash_profile
文件的底部将确保每次打开终端时都配置了docker
命令。
对于使用Fish shell的人:boot2docker shellinit ^ /dev/null | source
。
请注意,2> /dev/null
(和鱼等效^ /dev/null
)是可选的。就像@ pablo-fernandez建议的那样,这隐藏了Writing ..
行。
答案 1 :(得分:77)
我在使用sudo的MacOS上遇到了同样的错误,没有它。
我用以下方法解决了这个问题:
boot2docker start
$(boot2docker shellinit)
P.S。:感谢Alan。我发现their official documentation建议采用这种方法。
P.S.2:在运行两个命令之前,有时可能需要boot2docker init
(谢谢Aaron)。
答案 2 :(得分:54)
就我而言(Linux Mint 17),我做了各种各样的事情,而且我不确定哪些是完全必要的。
我包含了丢失的Ubuntu软件包:
$ sudo apt-get install apparmor lxc cgroup-lite
用户已添加到群组docker
:
$ sudo usermod -aG docker ${USER}
启动守护程序(openSUSE只需要这个)
$ sudo docker -d
感谢Usman Ismail,因为也许这只是最后一件事......
愚蠢的问题,但你启动了docker守护进程吗? - Usman Ismail 12月17日&14; 14日15:04
还要感谢github@MichaelJCole解决方案对我有用,因为当我阅读Usman的评论时,我没有检查守护进程。
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 post注意到丢失的软件包,忘记了默认的Ubuntu安装说明,并谷歌了解其他方式
事实证明,Linux Mint上默认不安装cgroup-lite和lxc软件包。然后安装两个允许我在基本映像中运行bash,然后构建并运行我的映像。
感谢brettof86关于openSUSE的评论
答案 3 :(得分:48)
下划线问题很简单 - 缺少/var/run/docker.sock
unix域套接字的权限。
来自Docker 1.6.0的 Docker命令行参考的后台程序套接字选项 chapter:
默认情况下,会创建一个unix域套接字(或IPC套接字)
/var/run/docker.sock
,需要root权限或docker 小组成员。
在Docker installation instructions for Fedora中很好地描述了向用户授予权限所需的步骤:
授予用户使用Docker的权限
docker命令行工具 通过套接字文件联系docker守护程序进程
/var/run/docker.sock
拥有root:root
。虽然建议 如果用户希望避免使用sudo for docker命令,请使用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.sock
放在docker
组中,因此不需要上述前两个步骤。
在OS X和boot2docker
的情况下情况不同; Docker守护程序在VM内部运行,因此必须将DOCKER_HOST
环境变量设置为此VM,以便Docker客户端可以找到Docker守护程序。这是通过在shell中运行$(boot2docker shellinit)
来完成的。
答案 4 :(得分:21)
确保Docker守护程序正在运行:
service docker start
为我修好了!
答案 5 :(得分:14)
$ docker version
命令查询是Docker可执行文件的内部查询,而不是运行的守护程序/服务。$ docker images or $ docker ps or $ docker pull centos
是向运行的docker守护程序/服务发送查询的命令。docker
的一部分或您在命令之前使用过sudo
时,例如$ sudo docker images
,是否需要TLS连接。访问Docker文档页面 Protect the Docker daemon socket 。
滚动一点到顶部并找到warning section
以便清楚。
答案 6 :(得分:12)
你需要这样做:
$boot2docker init
$boot2docker start
以下设置解决了问题:
$export DOCKER_HOST=tcp://192.168.59.103:2376
$export DOCKER_CERT_PATH=/Users/{profileName}/.boot2docker/certs/boot2docker-vm
$export DOCKER_TLS_VERIFY=1
答案 7 :(得分:10)
您可能还没有该文件的权限。 在我使用
将自己添加到docker
群组后,它发生在我身上
sudo gpasswd -a user docker
但还没有退出。
要解决此问题,您可以重新登录或使用
在您退出之前sg docker "docker <subcommand> ..."
。
如果您位于docker
中的/etc/group
组,则应该可以在不输入密码的情况下运行它。
答案 8 :(得分:6)
在安装 lxc-docker 后的Ubuntu上,您需要将用户添加到 docker 用户组:
sudo usermod -a -G docker myusername
这是因为套接字文件权限:
srw-rw---- 1 root docker 0 Mar 20 07:43 /var/run/docker.sock
请勿按其他任何一条评论中的建议运行usermod没有&#34; -a&#34; ,否则它将擦除您的其他群组设置,并将离开&#34;泊坞广告& #34;组
这将会发生:
➜ ~ 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)
答案 9 :(得分:5)
TLDR :当我在安装docker的诊所运行时,我的Python聚会小组遇到了这个问题,大多数用户都在OS X上:
boot2docker init
boot2docker up
运行输出给你的export
命令,然后
docker info
应该告诉你它有效。
上下文(是什么让我们遇到了问题)
我带领一家诊所安装了docker,大多数与会者都有OS X,我们遇到了这个问题,我在几台机器上克服了它。以下是我们遵循的步骤:
首先,我们安装了自制软件(是的,有些与会者没有):
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然后我们得到了用于安装virtualbox的cask,然后使用brew来安装docker和boot2docker(OS X所需的全部内容)Don't use sudo for brew.:
brew install caskroom/cask/brew-cask
brew cask install virtualbox
brew install docker
brew install boot2docker
解决方案
那是我们遇到问题的时候我们遇到的问题。以下修正了它。我理解init
是一次性合约,但每次启动泊坞广告时,您可能需要运行up
:
boot2docker init
boot2docker up
然后当up
运行时,它会发出几个export
命令。复制粘贴并运行它们。
最后docker info
应该告诉你它已正确安装。
演示
其余命令应该演示它。 (在Ubuntu linux上我需要sudo。)
docker run hello-world
docker run -it ubuntu bash
然后你应该在容器中的root shell上:
apt-get install nano
exit
返回您的原生用户bash:
docker ps -l
在“容器ID”下查找大约12位十六进制(0-9或a-f)标识符,例如456789abcdef
。然后,您可以提交更改并将其命名为一些描述性名称,例如descriptivename
:
docker commit 456789abcdef descriptivename`
答案 10 :(得分:3)
在Linux Ubuntu / Mint上运行Docker所需的一切:
sudo apt-get -y install lxc
sudo gpasswd -a ${USER} docker
newgrp docker
sudo service docker restart
如果以上操作无效,您可能需要安装另外两个依赖项:
sudo apt-get -y install apparmor cgroup-lite
sudo service docker restart
答案 11 :(得分:2)
我在这里尝试了解决方案,并且boot2docker无效。
我的解决方案:在Mac上卸载boot2docker,在VirtualBox中安装Centos 7 VM,并在该VM中使用Docker。
答案 12 :(得分:2)
对我来说,以下步骤有效:
docker run hello-world
失败了,问题出现了这个socked错误,但正在运行sudo docker run hello-world
。docker
群组sudo adduser user docker
。然后,您必须重新启动计算机或使用su - user
(如果在groups
组中,请使用docker
命令进行检查。)之后,hello-world
开始工作。
我的回答基于 How can I use docker without sudo? ,它解释了什么问题。
答案 13 :(得分:1)
对于它的价值,我尝试了这个问题和this related question中的所有解决方案,并且在我卸载并重新安装VirtualBox之前,没有解决我的问题。这个过程将VirtualBox从版本4.2.16升级到4.3.22(我之前的一个在系统上闲置了几个月)。
然后boot2docker
和docker
在没有任何其他调整的情况下工作。
答案 14 :(得分:1)
我遇到了同样的问题。一个简单的service docker restart
解决了这个问题。
答案 15 :(得分:0)
确保有
127.0.0.1 localhost
中的
`/etc/hosts `
文件。
答案 16 :(得分:0)
我有同样的问题并尝试了各种方法来解决这个问题,修改.bash_profile文件,登录和注销,没有任何运气。最后,重新启动我的机器修复它。
答案 17 :(得分:0)
当我从Jenkins创建Docker镜像时,我遇到了同样的问题。只需将用户添加到docker
组,然后重新启动Docker服务,在我的情况下,我必须重新启动Jenkins服务。
这是我得到的错误:
http:///var/run/docker.sock/v1.19/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=59aec062a8dd8b579ee1b61b299e1d9d340a1340: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile
Solution:
[root@Jenkins ssh]# groupadd docker
[root@Jenkins ssh]# gpasswd -a jenkins docker
Adding user jenkins to group docker
[root@Jenkins ssh]# /etc/init.d/docker restart
Stopping docker: [ OK ]
Starting docker: [ OK ]
[root@Jenkins ssh]# /etc/init.d/jenkins restart
Shutting down Jenkins [ OK ]
Starting Jenkins [ OK ]
[root@Jenkins ssh]#
答案 18 :(得分:0)
Docker守护程序绑定到Unix套接字而不是TCP端口。默认情况下,Unix套接字是由root用户拥有的,其他用户只能使用sudo访问它。 Docker守护程序始终以root用户身份运行。
sudo groupadd docker
sudo usermod -aG docker $USER
注销并重新登录,以便重新评估您的组成员身份。
docker run hello-world
答案 19 :(得分:-1)
另一个可能的原因是您的 BIOS CPU可视化未启用。先去启用吧!