我想转移到Docker,所以我刚刚开始搞乱它。我在VirtualBox Ubuntu 15.10(Wily Werewolf)安装上安装了Docker,然后作为suggested here我尝试运行基本的nginx Docker镜像:
$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
所以我检查了Docker是否正在运行:
$ sudo service docker status
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since vr 2015-11-06 08:41:48 CET; 15min ago
Docs: https://docs.docker.com
Main PID: 7542 (docker)
CGroup: /system.slice/docker.service
└─7542 /usr/bin/docker daemon -H fd://
nov 06 08:41:47 kramer65-VirtualBox systemd[1]: Starting Docker Application Container Engine...
nov 06 08:41:47 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:47.900410966+01:00" level=info msg="API ...ock"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.033514149+01:00" level=info msg="Fire...lse"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.141594321+01:00" level=info msg="Defa...ess"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.416294436+01:00" level=warning msg="Y...it."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.565507576+01:00" level=info msg="Load...rt."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567907022+01:00" level=info msg="Load...ne."
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567945214+01:00" level=info msg="Daem...ion"
nov 06 08:41:48 kramer65-VirtualBox docker[7542]: time="2015-11-06T08:41:48.567969891+01:00" level=info msg="Dock....9.0
nov 06 08:41:48 kramer65-VirtualBox systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
这表明Docker守护程序实际上已经在运行,但是为了确保我只是手动启动了Docker守护程序:
$ sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"
INFO[0000] Firewalld running: false
INFO[0000] Default bridge (docker0) is assigned with an IP address XXX.XX.X.X/XX. Daemon option --bip can be used to set a preferred IP address
WARN[0000] Your kernel does not support swap memory limit.
INFO[0000] Loading containers: start.
INFO[0000] Loading containers: done.
INFO[0000] Daemon has completed initialization
INFO[0000] Docker daemon commit=76d6bc9 execdriver=native-0.2 graphdriver=aufs version=1.9.0
然后我尝试再次运行图像,但结果相同:
$ docker run --name mynginx1 -P -d nginx
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
我试过sudo'ing命令,但无济于事。我在这做错了什么?
您需要将当前用户添加到docker组,如下所示:
sudo usermod -aG docker $(whoami)
然后注销并再次登录系统或重新启动系统。由docker version
测试
有关如何安装docker-engine的更多信息,请访问docker documentation
对于OSX:
打开docker并通过Quickstart Terminal(https://docs.docker.com/engine/installation/mac/)启动'default'机器后,你尝试使用docker命令并获得“无法连接到docker守护程序”的消息,结果发现你需要设置一些env变量:
eval "$(docker-machine env default)"
然后用docker run hello-world
试试看是否一切都是桃子的。
对于那些已经尝试重新启动你的机器的人来说,取消设置环境变量DOCKER_HOST,如docker env documentation中所说的那样,所有其他人只是尝试使用
sudo service docker restart
即使在重新启动机器后,只有这样才能解决这个问题。
添加docker组(如果尚不存在)。
$ sudo groupadd docker
将已连接的用户“$ {USER}”添加到泊坞窗组。
更改用户名以匹配您的首选用户。
您可能需要注销并重新登录才能生效。
$ sudo gpasswd -a ${USER} docker
重新启动Docker守护程序。
$ sudo service docker restart
这个问题目前在谷歌搜索中排名第3。在我的Linux系统上做一些解决这个问题的研究后,我想我会写这个答案。原帖说明问题出在Ubuntu上,但我也遇到过使用Fedora的问题。考虑到这一点,以下是我为解决问题所做的工作。
在Fedora 22上
安装Docker:
$> curl -fsSL https://get.docker.com/ | sh
安装Docker后:
需要将用户添加到docker组。
$> sudo usermod -aG docker
需要启动docker守护程序
$> sudo service docker start
您可以将守护程序设置为在引导时启动
$> sudo chkconfig docker on
您可以验证docker服务是否正在运行
$> service docker status
最后一次最终检查
$> docker run hello-world
尝试使用正在运行的命令“sudo”。
我在运行docker时遇到同样的问题。
你可以像sudo用户一样运行命令:
sudo docker ***your command here***
对于Ubuntu: 当我更新docker时发生在我身上。 您需要取消屏蔽服务和套接字,然后重新启动该服务。 以下为我工作:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
幕后发生了什么 systemd还可以通过将单元链接到/ dev / null来将单元标记为完全不可启动,自动或手动。这称为屏蔽单元,可以使用mask命令。
sudo systemctl mask docker.service
您可以使用以下方法检查屏蔽服务列表:
sudo systemctl list-unit-files
要启用自动/手动启动服务,您需要使用以下命令取消屏蔽:
sudo sytemctl unmask docker.service
当docker绑定到启动时由root拥有的unix套接字时,使用'sudo'和docker命令将起作用。
在Ubuntu 16.04中测试过
# Create the docker group and add your user to the docker group
groupadd docker
usermod -aG docker $USER
newgrp docker
# Configure docker service to be exposed
mkdir -p /etc/systemd/system/docker.service.d
echo -e '[Service]\nExecStart=\nExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376' >> /etc/systemd/system/docker.service.d/override.conf
# restart service
systemctl daemon-reload
service docker restart
将用户添加到docker组
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
newgrp docker
,要么注销/以激活对组的更改。我在Amazon EC2实例上遇到了同样的错误。重新启动实例后,问题得到解决。
将当前用户添加到docker组:
sudo usermod -aG docker $(whoami)
对于Ubuntu 16.04
内部文件/lib/systemd/system/docker.service
更改:
ExecStart=/usr/bin/dockerd fd://
有:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375
内部文件/etc/init.d/docker
更改:
DOCKER_OPTS=
有:
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
然后重新启动计算机。
也许这会对某人有所帮助,因为错误信息非常无益,而且我已经多次经历了所有标准权限步骤而无济于事。
尽管您的系统正确设置,Docker偶尔会留下阻止访问的ghost环境变量。以下shell命令可以使它再次可访问,如果您已经在一个点上运行它并且它在重新启动后停止了合作:
unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps
我有一个以前工作的docker安装,并在重新启动我的笔记本电脑后,它只是拒绝工作。已正确添加到docker用户组,对套接字具有正确的权限等,但仍然无法运行docker login
,docker run ...
等。这为我修复了它。不幸的是我必须在每次重启时运行它。 This is mentioned on a couple of github issues also作为一种解决方法,虽然看起来像是一个错误,这是正确操作Docker的一个持久障碍(注意:我在Arch Linux上,而不是OSX,但这对我来说是同样的问题)。
通常,以下命令可以解决这个问题:
sudo service docker restart
对于Docker似乎已经在运行的情况,而不是docker start
。
如果那样,按照建议,在另一个答案和GitHub issue上,如果你还没有在docker组中添加自己,那么运行:
sudo usermod -aG docker <your-username>
你最有可能去。
至于碰到这个的任何其他人,在某些操作系统的Docker中,在安装它之后没有立即启动,因此,出现相同的can't connect to daemon message
。在这种情况下,您可以通过执行以下命令来检查Docker服务的状态,从而首先验证Docker确实没有运行:
sudo service docker status
如果输出看起来像:docker stop/waiting
而不是docker start/running, process 15378
那么它显然意味着Docker不活跃。在这种情况下,请确保您启动它:
sudo service docker start
而且,和以前一样,你很可能会很高兴。
自我注意:当我忘记用docker
运行sudo
命令时,我从问题标题中得到错误:
sudo docker run ...
[Ubuntu 15.10]
有同样的问题,对我有用的是: 检查/var/run/docker.sock的所有权
ls -l /var/run/docker.sock
如果您不是所有者,则使用该命令更改所有权
sudo chown *your-username* /var/run/docker.sock
然后你可以继续尝试无障碍地执行docker命令:D
安装好所有内容并启动服务后,尝试关闭终端并再次打开,然后尝试拉动图像
我也有这个问题,如果上面的解决方案不起作用,请尝试this solution,这是命令波纹管
sudo mv /var/lib/docker/network/files/ /tmp/dn-bak
如果上面的命令工作,你可能有网络docker问题,无论如何这解决了它,以确认,请使用命令下面的命令查看日志
tail -5f /var/log/upstart/docker.log
如果输出有类似的东西
FATA[0000] Error starting daemon: Error initializing network controller: could not delete the default bridge network: network bridge has active endpoints
/var/run/docker.sock is up
你确实遇到网络问题,但是我不知道下次你重新启动(更新,2个月没有问题)你的操作系统会再次遇到这个问题,如果它是一个bug或安装问题
我的码头版
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5
Built: Fri Nov 20 13:12:04 UTC 2015
OS/Arch: linux/amd64
在Ubuntu上安装docker之后,我运行了以下命令:
sudo service docker start
你试过吗?
我有同样的问题。一直在努力解决它两天。
它只在我做的时候起作用:
$ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add -
$ sudo usermod -aG docker $USER
希望这对你也有帮助。
以root身份输入(sudo su
)并尝试:
unset DOCKER_HOST
docker run --name mynginx1 -P -d nginx
我在这里遇到同样的问题,并且docker命令只能以root身份运行,并且这个DOCKER_HOST
也是空的
PS:还要注意Ubuntu上的correct and official way to install是使用他们的apt存储库(即使在15.10),而不是那个“wget”的东西。