ChatGPT解决这个技术问题 Extra ChatGPT

Docker 无法连接到 docker 守护进程

将 Docker 版本更新为 0.8.0 后,我在输入 sudo docker version 时收到错误消息:

Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
2014/02/19 12:54:16 Can't connect to docker daemon. Is 'docker -d' running on this host?

我已经按照说明输入了命令 sudo docker -d,我得到了这个:

[/var/lib/docker|2462000b] +job initserver()
[/var/lib/docker|2462000b.initserver()] Creating server
open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory[/var/lib/docker|2462000b] -job initserver() = ERR (1)
2014/02/19 12:55:57 initserver: open /var/lib/docker/aufs/layers/cf2414da53f9bcfaa48bc3d58360d7f1cfd3784e4fe51fbef95197709dfc285d: no such file or directory

我该如何解决这个问题?

你在运行 docker -d 时使用了 sudo 吗?
我注意到错误中显示的是 no such file or directory[/var/lib/docker|2462000b]。您的系统上是否存在 /var/lib/docker?如果没有,那么我认为您需要重新安装 Docker。
我有同样的问题(无法连接到“ps”显示仍在运行的守护程序),除了在启动守护程序时我没有收到任何“找不到文件”消息。 /var/lib/docker 确实存在。
你在 VPS 上使用 docker 吗?
从这里安装docker桌面,它会解决它。 docs.docker.com/docker-for-mac/install

O
Olivier Dagenais

Linux

Post-installation steps for Linux 文档揭示了以下步骤:

创建泊坞窗组。 sudo groupadd docker 将用户添加到 docker 组。 sudo usermod -aG docker $(whoami) 注销并重新登录以确保 docker 以正确的权限运行。启动泊坞窗。须藤服务码头工人开始

Mac OS X

正如 Dayel Ostraco 所说,有必要添加环境变量:

docker-machine start # Start virtual machine for docker
docker-machine env  # It's helps to get environment variables
eval "$(docker-machine env default)" # Set environment variables

docker-machine start 命令输出注释以指导该过程。


是的。这对我来说是个问题。我将我的用户添加到 docker 组,现在我可以连接到守护进程。谢谢
FWIW,特定部分的链接是 this
如果由于某种原因不想注销,可以使用 newgrp 命令在这个新组中启动一个新的 shell。像这样:newgrp docker
我没有时间重新启动 bash。所以 alias docker='sudo docker' 成功了。 :p
对于 Linux,如果您希望 Docker 在引导时启动,请使用 configure systemd/upstart/chkconfig to start docker on boot。 systemd: sudo systemctl enable docker, chkconfig: sudo chkconfig docker on, upstart 默认开启。
k
kenorb

Linux

要在 Linux(来自 CLI)上运行 docker 守护程序,请运行:

$ sudo service docker start # Ubuntu/Debian

注意:复制和粘贴时跳过 $ 字符。

在 RedHat/CentOS 上,运行:sudo systemctl start docker

要初始化“基本”文件系统,请运行:

$ sudo service docker stop
$ sudo rm -rf /var/lib/docker
$ sudo service docker start

或手动喜欢:

$ sudo docker -d --storage-opt dm.basesize=20G

在 Linux 上安装 docker-machine

在 Linux 上安装机器二进制文件:

本地:安装 -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) $HOME/bin/docker-machine

全局:sudo bash -c 'install -vm755 <(curl -L https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-机器'

苹果系统

在 macOS 上,docker 二进制文件只是一个客户端,您不能使用它来运行 docker 守护程序,因为 Docker 守护程序使用 Linux 特定的内核功能,因此您不能在 OS X 中本地运行 Docker。所以您必须安装 { 2}为了创建VM并附加到它。

在 macOS 上安装 docker-machine

如果您还没有 docker-machine 命令,请使用以下方法之一安装它:

使用 Brew 命令:brew install docker-machine docker。

从 GitHub 手动安装 -v <(curl https://github.com/docker/machine/releases/download/v0.5.3/docker-machine_linux-amd64) /usr/local/bin/docker-machine

请参阅:Get started with Docker for Mac

在 macOS 上配置 docker-machine

要通过 Homebrew 启动 Docker Machine,请运行:

brew services start docker-machine

要创建 default 机器(如果您没有,请参阅:docker-machine ls):

docker-machine create --driver virtualbox default

然后为 Docker 客户端设置环境:

eval "$(docker-machine env default)"

然后通过列出容器进行仔细检查:

docker ps

请参阅:Get started with Docker Machine and a local VM

在 macOS 上安装 Docker.app

作为上述解决方案的替代方案,您可以通过以下方式安装 Docker 应用程序:

brew cask install docker

检查此post for more details。另请参阅:Cannot connect to the Docker daemon on macOS


sudo service docker start 在 Ubuntu 14.04 上与 Docker 1.9.1 一起使用
谢谢。这就是在 Ubuntu 14.04 上对我有用的方法。其他一切都失败了。
这是在 2010 年以前的硬件的 Mac OSX 上对我有用的唯一方法。我必须从 docs.docker.com/toolbox/toolbox_install_mac 安装 docker-toolbox
我需要通过 Homebrew 安装 docker-compose、docker-machine 和 docker,然后它工作正常!
我在使用 docker 18 和 sudo rm -rf /var/lib/docker 的 CentOS 7.6 上遇到了这个问题,然后重新启动就可以了。我真的被困住了,没有其他解决方案对我有用。
P
Peter Mortensen

如果您在 OS X 上运行 Docker,则运行以下 eval 对我有用。

eval "$(docker-machine env default)"

如果您不想在每个终端会话上运行此 eval 语句,您可以将其添加到您的 bash_profile

#Docker
eval "$(docker-machine env default)"

请务必重新启动终端会话或在 bash_profile 上运行 source 以使更改生效。


同样在这里,如果我单独尝试,我经常会得到 Error checking TLS connection: Host is not running... 在命令 docker-machine start default 成功后运行此 eval。
P
Peter Mortensen

经过详细调查,这个问题似乎每次在 Mac OS X 重新启动(或 Docker 虚拟机重新启动)后都会发生,这会阻止 Docker 客户端连接到 Docker 守护进程。

要解决此问题,您可以:

A) 使用官方安装程序 (https://www.docker.com/products/docker-toolbox) 重新安装 Docker Toolbox,或者干脆

B) 按顺序运行以下命令:

# First make sure that the virtual machine is running
docker-machine start default

# Regenerate TLS connection certs, requires confirmation
docker-machine regenerate-certs default

# Finally, set env
eval "$(docker-machine env default)"

C)与(B)相同,您也可以复制并粘贴以下行以运行所有三个命令:

docker-machine start default; docker-machine regenerate-certs default; eval "$(docker-machine env default)"

如果您收到以下错误:

Error getting SSH command: Something went wrong running an SSH command!
command : cat /etc/os-release
err     : exit status 255
output  :

只需再次重新运行三个命令,它应该第二次工作。


我得到主机不存在:“默认”
@RomanGaufman:这对你有用吗:docker-machine start default?
@RomanGaufman 在命令成功执行之前我必须重新启动我的终端。
这是因为每次重新启动mac时虚拟机vm的ip都会改变吗?
@RomanGaufman 的错误由以下答案(当前)解决:stackoverflow.com/a/34887761/634576
n
nPcomp

这通常发生在您不在 docker 组中时。您可以通过以下方式将自己添加到 docker 组:

sudo usermod -aG docker yourusername

或者

sudo usermod -aG docker $(whoami)

在此之后,您需要注销并重新登录到服务器。

或者,您可以sudo每个 Docker 命令。


如果组不存在: sudo groupadd docker
P
Peter Mortensen

如果上述所有其他解决方案都不起作用,您可以尝试检查 /var/run/docker.sock 的所有权:

ls -l /var/run/docker.sock

如果您不是所有者,则使用以下命令更改所有权:

sudo chown *your-username* /var/run/docker.sock

然后,您可以继续尝试轻松执行 Docker 命令:D


我从这个答案开始,这对我有帮助!
这种方法的问题在于,每次重新启动守护程序时都必须重复此步骤
嗨@MFIhsan,一个聪明的系统管理员会告诉你简单地创建一个包含这些命令和 & 的 bash 脚本。将其添加到 crontab 以使其在重新启动/启动时运行,如此处所述> stackoverflow.com/a/29247942/3469960
普通用户永远不应该拥有袜子!如果您不拥有袜子,请确保您在轮组和袜子所属的组中......而不是袜子所有者组!
这个 sudo chown $(whoami) /var/run/docker.sock 是否也有效?
k
kvadityaaz

你可以使用命令

sudo service docker stop && sudo service docker start

或者

sudo service docker restart

只需重新启动它。


或者sudo service docker restart,更简单😊
systemdsudo systemctl restart docker
R
Robert Elwell

找出 Docker 为何不工作的最佳方法是手动运行守护程序。

$ sudo service docker stop
$ ps aux | grep docker  # do this until you don't see /usr/bin/docker -d
$ /usr/bin/docker -d

Docker 守护进程记录到 STDOUT,所以它会开始吐出它正在做的任何事情。

这是我的问题:

[8bf47e42.initserver()] Creating pidfile
2015/01/11 15:20:33 pid file found, ensure docker is not running or delete /var/run/docker.pid

这是因为该实例是从另一个虚拟机克隆的。我只需要删除 pidfile,然后一切正常。

当然,我建议不要盲目地假设这会起作用,而是建议再手动运行一次守护程序,并在启动服务备份之前查看日志输出是否有任何其他错误。


这也是帮助我找到问题的原因(不幸的是,我后来看到了你的答案)。我的是缺少的 apparmor 包。
这个解决方案对我有用。删除 /var/run/docker.pid 后,我终于能够启动 docker。
警告:'-d' 已被弃用,它将很快被删除。见用法。 WARN[0000] 请改用“docker daemon”。
提供但未定义的标志:-d
要在启用调试的最新版本中手动运行 docker 守护程序,请使用:dockerd -D
R
Reza S

执行 ps aux | grep docker 以查看守护程序是否正在运行。如果不运行 /etc/init.d/docker start


我也有同样的问题。 'ps' 表明我的 docker 进程仍在运行。
停止和启动 docker(它已经在运行)让我理顺了。
sudo service docker start 告诉我“docker start/running, process 4633”然后 sudo service docker status 告诉我“docker stop/waiting”
P
Peter Mortensen

如果您收到消息Can't connect to docker daemon. Is 'docker -d' running on this host?,您可以通过docker version查看。

如果看到Docker Client is running. but Docker Server is not这样的信息,显然需要启动Docker服务器。

在 CentOS 中,您可以使用 service 来启动或停止 Docker 服务器。

$ sudo service docker stop
$ sudo service docker start

然后,输入 docker version 后,会得到 Docker Client and Docker Server 的信息,Docker daemon 已经启动。


sudo service docker start 在 Ubuntu 14.04 上也为我工作。
Cent os 7,每次启动docker时都必须这样做。
@Paddy您需要在声明后启用该服务,如果系统启动它就会运行并保持在后台运行。
所有这些回答说:“你需要 sudo systemctl start docker”总是假设有一个 docker 服务要启动。如果安装 docker 有任何问题,甚至可能不存在服务配置文件,在这种情况下,您会得到:“Unit docker.service not loaded”
k
kayn

我有类似的问题。我不得不注销并再次登录到 shell,因为我刚刚安装了 Docker,并且我的环境中没有显示以下命令。

export DOCKER_HOST=127.0.0.1:4243 >> ~/.bashrc

我只需要注销并重新登录。一切都已解决!
这解决了我的问题!我将 Ubuntu 16.04 作为 WSL 运行。我唯一需要更改的是默认端口号:export DOCKER_HOST=127.0.0.1:2375 >> ~/.bashrc
P
Peter Mortensen

安装后我重新启动 Docker:

$ sudo service docker stop
$ sudo service docker start

它有效。


S
Sean Yap

使用 Docker CE 应用程序

苹果系统

使用适用于 macOS 的新 Docker Community Edition app。例如:

卸载到目前为止已安装的所有 Docker Homebrew 软件包: brew uninstall docker-compose brew uninstall docker-machine brew uninstall docker 手动或通过 Homebrew-Cask 安装应用程序: brew install --cask docker

注意:此应用会创建指向 dockerdocker-composedocker-machine 等的必要链接。

运行应用程序后,检查状态菜单中的 Docker 鲸鱼图标。现在您应该可以像往常一样在终端中使用 docker、docker-compose、docker-machine 命令了。

有关的:

brew install docker 不包括 docker 引擎?

无法连接到 macOS 上的 Docker 守护进程

Linux/Windows

下载 Docker CE from the download page 并按照说明进行操作。


2018-5-20 注意:macOS 上的 Docker CE 应用程序非常糟糕。每次我打开它都只是冻结的方式,不能做任何事情。我尝试谷歌并解决问题,到目前为止仍在努力
这是报告问题的正确答案,谢谢!
谢谢。最新 brew/Big Sur 的语法略有不同: brew install --cask docker
brew install --cask docker(截至 2021 年)
P
Peter Mortensen

我遇到了这个问题,我使用以下命令重新启动了 Docker:

$ sudo service docker stop
$ sudo service docker start

但是我没有解决我的问题,因为我忘记在没有 sudo 的情况下执行我的 Docker 命令。对于那些面临这个问题的人,试着检查一下。

尝试

$ sudo docker info

而不是这个:

$ docker info

正是我尝试在 Ubuntu Xenial 上运行 docker build 时遇到的问题。
P
Peter Mortensen

我有同样的错误,尝试 docker-machine regenerate-certseval.. 对我不起作用。

这在 OS X 10.11.3 (El Capitan) 和 Docker v1.10.1 上。我只能通过再次删除并重新创建 docker-machine 来修复它。 Source

如果运行 docker-machine ls,它会向您显示与以下类似的输出;

DOCKER Unknown ERRORS 无法查询 docker 版本:无法连接到 docker 引擎端点

尝试删除您的 Docker 机器;

docker-machine rm -f default

其中 default 是您的 Docker 机器名称。然后;

docker-machine create -d virtualbox default

创建一个新的 Docker 机器。

仔细检查现在一切是否正常(没有错误或未知的 Docker):

docker-machine ls

最后不要忘记在继续之前运行 "$(docker-machine env default)" 或运行 Docker 快速启动终端,它会为您完成它...


P
Prakasam Dhamodhiran

我知道这篇文章中已经有很多答案了。只是我想添加一个解决上述问题的简单答案。

sudo systemctl start docker

运行上述命令,它将启动所有与 docker 相关的线程/服务。


P
Peter Mortensen

尝试将当前用户添加到 docker 组:

sudo usermod -aG docker $USER

然后注销并登录。


J
Jonathan Hartley

我遇到了同样的问题 - “无法连接到 docker daemon。” (除了我在尝试启动服务器时没有收到任何“找不到文件”错误。)

“ps”显示“/usr/bin/docker -d”仍在运行

我意识到我自己从来没有真正成功地运行过服务器。每一次尝试都产生了

...
2014/03/24 21:57:29 pid file found, ensure docker is not running or delete /var/run/docker.pid

所以我很晚才意识到,安装 docker 可能已经向 upstart 注册了守护进程,它已经为我启动了它。因此,尝试杀死守护程序以手动重新启动它会失败(不允许操作)。所以我做了一个

sudo kill -9 <PID>

在守护进程上。另一个守护进程立即取而代之,而这个新守护进程现在可以让我的 CLI 客户端连接:

$ sudo docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 0
WARNING: No memory limit support
WARNING: No swap limit support

b
blasrodri

关注 Docker 的 DOC 站点:Manage Docker as a non-root user

1) 创建 Docker 组

sudo groupadd docker 

2) 使用户属于 docker 组以获取该组的权限。

sudo usermod -aG docker $USER

检查是否为您的 shell 设置了 DOCKER_HOST 环境变量。

env | grep DOCKER_HOST

如果存在,

unset DOCKER_HOST

那么这应该工作:

docker run hello-world

你是我的救命恩人unset DOCKER_HOST
花了两个小时寻找这个 unset DOCKER_HOST 解决方案。谢谢!
我在我的 .zshenv 中设置了 DOCKER_HOST,smh
P
Peter Mortensen

我刚刚遇到了同样的问题,在 Amazon AWS 上运行。

这是我尝试的:

使用现有的 AWS 实例在本地设置 docker-machine

使用的通用设置

它有点连接,但由于远程端口被关闭,它失败了

之后,Docker 守护进程拒绝启动,但运行 dockerd 确实有效......

它在远程机器上进行了以下测试:

service docker start # Also restart, no success
systemctl start docker # Also restart, no success
dockerd # Success

我删除了 /var/lib/docker 并卸载了所有内容,但重新安装后没有成功。不幸的是,我没有存储失败的日志,但 docker.service 只是拒绝启动。

但是,最终解决我的问题的基本上是:

sudo usermod -aG docker $(whoami)

B
Brhaka

2020 年 4 月在 MacOS Catalina 上,您只需要打开桌面应用程序:

https://i.stack.imgur.com/v9va5.png


另外,打开 docker->preference -> kubernetes -> 勾选“启用 kubernetes”
P
Peter Mortensen

我遇到了同样的问题。在 CentOS 6.5 中:

ps aux |grep `cat /var/run/docker.pid`

如果它显示不存在 Docker 守护进程,那么我输入:

docker -d

然后 Ctrl + D 停止 Docker。因为我们使用 -d 选项,Docker 将作为守护进程运行。现在我们可以这样做:

service docker start

然后我可以做一个docker pull centos。就这样。

注意:如果这些不起作用,您可以尝试 yum update,然后再重复一遍,因为我在 yum install 之前。


这一步对我在机器上硬锁后诊断我的 docker 问题很重要。但是我必须运行以获取此 docker 输出的命令是没有标志的 sudo /usr/bin/dockerd。 Ubuntu 18。
P
Peter Mortensen

如果您使用 Docker 工具在 OS X 上运行,请按照此操作。

重新启动守护程序并配置您的环境:

docker-machine restart

接着

docker-machine env

最后,

eval $(docker-machine env)

要测试守护程序是否正在运行:

docker ps -adocker-machine ls。这将列出所有容器。


A
Allan Sene

Docker Service 可能未运行。

如果您使用的是 RedHat/Fedora/CentOS,请尝试以下操作:

sudo systemctl start docker

如果您使用的是 Ubuntu/Debian:

sudo service start docker

Docker 将开始在您的主机和相应的端口上运行。


B
Bill Zelenko

为了解决这个问题,我必须启用 docker 服务:

sudo systemctl enable /usr/lib/systemd/system/docker.service

B
Bob

检查您是否正在使用 Docker Machine :)

运行 docker-machine env default 应该可以解决问题。

因为根据文档:

Docker Machine 是一种工具,可让您在虚拟主机上安装 Docker Engine,并使用 docker-machine 命令管理主机。您可以使用 Machine 在本地 Mac 或 Windows 机器、公司网络、数据中心或 AWS 或 Digital Ocean 等云提供商上创建 Docker 主机。使用 docker-machine 命令,您可以启动、检查、停止和重新启动托管主机,升级 Docker 客户端和守护程序,并配置 Docker 客户端以与您的主机通信。将 Machine CLI 指向正在运行的托管主机,您可以直接在该主机上运行 docker 命令。例如,运行 docker-machine env default 以指向名为 default 的主机,按照屏幕上的说明完成 env 设置,然后运行 docker ps、docker run hello-world 等等。

https://docs.docker.com/machine/overview/


N
Nilesh Kande

我也有同样的问题。问题出在分配给 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.


P
Peter Mortensen

要修复,您需要在终端中发出以下命令。我将解释每个步骤:

# Uninstall Docker from apt packages
$ sudo apt-get remove docker docker.io

# Remove it from the libraries just to be
# sure it's gone forever
$ sudo rm -rf /var/lib/docker/*

现在,如果您想简化事情并获得更多时间,可以使用参数 installDocker 运行我的 init script

# Pull the init script from GitHub
$ wget https://github.com/dminca/dotfiles/blob/master/init

# Add rights to run the script
$ chmod 755 init

# Just run the script with the installDocker parameter
$ ./init installDocker

重新启动是可选的,但我建议您这样做以确保一切顺利运行。


P
Peter Mortensen

我在 Ubuntu 14.04 上运行 Docker 1.10 时遇到了同样的问题,并且给出的答案都没有奏效。对我来说,解决方法是在运行 Docker 守护程序时指定存储驱动程序。

sudo docker daemon --storage-driver=devicemapper

E
Erich

我有一个类似的问题。

就我而言,解决方案是删除已弃用的 docker 版本。我认为这引起了一些冲突。

在 ubuntu 上:

sudo apt remove docker

为我解决了问题