我想转向 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 命令,但无济于事。我在这里做错了什么?
sudo service docker restart
您需要将当前用户添加到 docker 组,如下所示:
sudo usermod -aG docker $(whoami)
然后 注销 &再次登录进入系统或重新启动系统。 docker version
测试
有关如何安装 docker-engine 的更多信息,请关注 docker documentation
将用户添加到 docker 组
如果 docker 组不存在,请添加它:sudo groupadd docker
将连接的用户“${USER}”添加到 docker 组:sudo gpasswd -a ${USER} docker
重启 Docker 守护进程:sudo service docker restart
执行 newgrp docker 或注销/登录以激活对组的更改。
newgrp docker
似乎是 shell 本地的,而不是登录会话。从手册页中根本不清楚。
通常,以下命令可以解决问题:
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
而且,和以前一样,你很可能会很顺利。
自我注意:当我忘记使用 sudo
运行 docker
命令时,我从问题的标题中得到错误:
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
root
所有,但在 docker
组中。根据 Docker 的文档,正确的方法是将当前用户分配到 docker
组:sudo groupadd docker && sudo usermod -aG docker $USER
在 Ubuntu 上安装 docker 后,我运行了以下命令:
sudo service docker start
你试过了吗?
安装完所有内容并启动服务后,尝试关闭终端并再次打开它,然后尝试拉取您的图像
编辑
我也再次遇到了这个问题,如果上面的解决方案不起作用,请尝试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 个月再次没有问题)时,您的操作系统是否会再次出现此问题,以及是否是错误或安装问题
我的码头工人版本
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
我有同样的问题。苦苦挣扎了两天才解决。
它仅在我这样做时才有效:
根据 Docker 的教程,如果尚未添加 Docker 密钥,则需要添加: $ sudo wget -qO- https://get.docker.com/gpg | sudo apt-key add - 然后确保您使用以下命令授予自己 docker 权限:$ sudo usermod -aG docker $USER
希望这对你也有帮助。
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”事物。
对于 OSX:
打开 docker 并通过快速启动终端 (https://docs.docker.com/engine/installation/mac/) 启动“默认”机器后,您尝试使用 docker 命令并收到“无法连接到 docker daemon”消息,事实证明您需要设置一些环境变量:
eval "$(docker-machine env default)"
然后用 docker run hello-world
试试看是否一切都很好。
对于那些已经尝试重新启动机器的人,请按照 docker env documentation 中的说明取消设置环境变量 DOCKER_HOST,其余的只是尝试使用
sudo service docker restart
即使在重新启动机器后,只有这对我有用。
授予非 root 访问权限 - 来自 docker
如果 docker 组不存在,请添加它。
$ sudo groupadd docker
将连接的用户“${USER}”添加到 docker 组。
更改用户名以匹配您的首选用户。
您可能必须注销并重新登录才能生效。
$ sudo gpasswd -a ${USER} docker
重新启动 Docker 守护程序。
$ sudo service docker restart
这个问题目前在谷歌搜索中排名第三。在对我的 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
dockerroot
。此外,您可能希望从存储库(而不是 curl ... | sh
)安装它,以便以后可以更新:dnf install docker
groupadd docker
,然后将它添加到您的用户名sudo usermod -aG docker your_username
在 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
尝试在您正在运行的命令中使用“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
https://i.stack.imgur.com/LTIHj.png
要启用服务的自动/手动启动,您需要使用以下方法取消屏蔽它:
sudo sytemctl unmask docker.service
https://i.stack.imgur.com/R6Rza.png
由于 docker 在启动时绑定到 root 拥有的 unix 套接字,因此使用 'sudo' 和 docker 命令将起作用。
我也有同样的问题。问题出在分配给 docker-daemon 和 docker-client 的套接字中。首先,没有为 docker.sock 上的 docker-client 设置权限您可以使用“sudo usermod -aG docker $USER”设置它然后检查 docker-client 运行的 bash 文件,对我来说它位于 0.0.0.0 :2375,当 docker-daemon 在 unix socket 上运行时。(它是在 dockerd 的配置文件中设置的)。只需评论 bash 行,它就会正常工作。但是如果你想让它在 TCP 端口而不是 unix 套接字上工作,请更改 dockerd 的配置文件并将其设置为 0.0.0.0.2375 并保持 bash 中的行(如果存在)或将其设置为 0.0.0.0: 2375.
也许这会对某人有所帮助,因为错误消息非常无用,而且我已经多次完成所有标准权限步骤但无济于事。
尽管您的系统已正确设置,但 Docker 偶尔会保留阻止访问的幽灵环境变量。如果您曾经让它在某个时间运行并且在重新启动后它刚刚停止合作,则以下 shell 命令可能使其再次可访问:
unset DOCKER_HOST
unset DOCKER_TLS_VERIFY
unset DOCKER_TLS_PATH
docker ps
我有一个以前工作的 docker install ,并且在重新启动我的笔记本电脑后它只是拒绝工作。已正确添加到 docker 用户组,对套接字等具有正确的权限,但仍无法运行 docker login
、docker run ...
等。这为我解决了问题。不幸的是,我必须在每次重新启动时运行它。 This is mentioned on a couple of github issues also 作为一种解决方法,尽管这似乎是一个错误,这是正确操作 Docker 的一个持久障碍(注意:我使用的是 Arch Linux,而不是 OSX,但这对我来说是同样的问题)。
我可以通过运行以下命令来解决这个问题:
sudo mv /var/lib/dpkg/info/docker-ce* /tmp
我在 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"
然后重新启动计算机。
不定期副业成功案例分享
Cannot connect to the Docker daemon. Is the docker daemon running on this host?