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

我通常喜欢在我的OSX上用brew管理我的应用程序

我能够安装docker, docker-compose和docker-machine

docker --version
Docker version 17.05.0-ce, build 89658be
docker-compose --version
docker-compose version 1.13.0, build unknown
docker-machine --version
docker-machine version 0.11.0, build 5b27455

我没有下载并运行“Docker for Mac”应用程序。

然而,当我试图跑

> docker run -d -p 80:80 --name webserver nginx
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
See 'docker run --help'.

我已经检查了袜子档案

ls -lah /var/run/docker.sock /var/tmp/docker.sock
ls: /var/run/docker.sock: No such file or directory
ls: /var/tmp/docker.sock: No such file or directory

我也尝试了这个建议的解决方案:Mac OS X sudo docker无法连接到docker守护进程。这个主机上是否运行docker守护进程?

但是我收到了这个错误信息:

$ eval $(docker-machine env default)
Host does not exist: "default"

有可能通过命令行工具来运行docker服务吗?

384388 次浏览

尝试这样创建默认值。

docker-machine create default

在OSX上确保你已经启动Docker应用程序

docker ps

docker build…等等……是的,这看起来很奇怪,有点误导

docker --version

给出版本,即使docker守护进程没有运行…其他版本的CMDS也是如此…我只是遇到了同样的症状…OSX上的这种行为与linux上不同

在受支持的Mac上运行:

brew install --cask docker

然后启动码头工人应用程序。单击下一步。它将要求特权访问。确认。鲸鱼图标应该出现在顶部栏。点击它,等待“Docker is running”;出现。

你现在应该能够运行docker命令了:

docker ps

因为docker是一个系统级包,你不能使用brew install来安装它,而必须使用--cask来代替。

注意:此解决方案仅适用于cpu支持虚拟化的mac,可能不包括旧的mac。

编辑2022 -评论区提到Docker Desktop的许可有了变化。请考虑以下替代方案,并查看评论以了解详细信息。

我也有同样的问题。Docker正在运行,但无法通过CLI访问它。

对我来说,这个问题是通过执行“Docker Quickstart Terminal.app”解决的。它位于“/Applications/Docker/”文件夹中。只要我在这个终端应用程序的实例中工作,Docker就可以完美地工作。如果需要第二个窗口,我必须再次运行“快速入门”应用程序。

我有一个用于Mac安装的Docker。因此,我不确定我的解决方案是否适用于Homebrew安装。

“Docker快速启动终端”应用程序似乎本质上是一些启动终端应用程序的applescripts和一个初始化所有必要环境变量的bash启动脚本。

希望这能帮助到其他人!

我遇到了同样的问题,我用以下步骤解决了它:

docker-machine restart

退出终端(或iTerm2等)并重新启动

eval $(docker-machine env default)

我也回答它在这里

在macOS上,docker二进制文件只是一个客户端,你不能用它来运行docker守护进程,因为docker守护进程使用linux特定的内核特性,因此你不能在OS x中本机运行docker。所以你必须安装docker-machine来创建VM并附加到它。

在macOS上安装docker-machine

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

  • 使用酿造命令:brew install docker-machine docker

  • 手动从发布页面

    $ curl -L https://github.com/docker/machine/releases/download/v0.16.1/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine
    $ chmod +x /usr/local/bin/docker-machine
    

看到:开始使用Docker for Mac

Virtualbox安装

docker-machine依赖于VirtualBox被安装,如果不是这样将会失败。如果您已经拥有VirtualBox,则可以跳过此步骤。

  • 使用Homebrew: brew install --cask virtualbox
  • 手动使用Virtualbox.org上的版本

您需要在OS X安全面板中主动接受加载Virtualbox内核扩展,然后继续执行重新启动机器,以便下一个命令不会使用Error: VBoxNetAdpCtl: Error while adding new interface失败

在macOS上配置docker-machine

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

docker-machine create --driver virtualbox default

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

eval "$(docker-machine env default)"

然后通过列出容器进行再次检查:

docker ps

看到:从Docker Machine和本地VM开始


相关:

我第一次通过homebrew尝试docker和docker-compose,但它有这里列出的问题。我必须从https://docs.docker.com/docker-for-mac/install/安装docker的官方安装,然后一切都按预期工作。

我有最新的docker, docker说它在运行,诊断很好。我需要取消一些遗留环境变量(感谢https://docs.docker.com/docker-for-mac/troubleshoot/#workarounds-for-common-problems)

unset DOCKER_HOST
unset DOCKER_CERT_PATH
unset DOCKER_TLS_VERIFY

我只需要运行spotlight搜索并执行brew cask install创建的/Applications文件夹下的Docker应用程序。一旦运行,它要求完成安装。然后我能够运行docker ps

我有Mac OS,我打开Launchpad并选择docker应用程序。 从reset选项卡单击restart

安装minikube,加入黑暗面。

< a href = " https://kubernetes。io / docs /任务/工具/ install-minikube noreferrer“rel = > https://kubernetes.io/docs/tasks/tools/install-minikube/ < / >

$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

eval $(minikube docker-env)

$ docker run --rm -v ${PWD}:/local swaggerapi/swagger-codegen-cli generate     -i /local/swagger.json     -l python     -o /local/test/
[main] INFO io.swagger.parser.Swagger20Parser - reading from /local/swagger.json
[main] WARN io.swagger.codegen.DefaultGenerator - 'host' not defined in the spec. Default to 'localhost'.

使用bash v5在Macbook Pro 2018上工作出色。在我看来,现在不需要安装所有其他无意义的docker了。根据我的经验,minikube附带的VM和安装脚本可以取代docker机器。

我在我的mac上也遇到了类似的问题,我发现docker没有在我的机器上运行,我只是去了应用程序,调用了whale,然后它就工作了。

你应该执行安装docker的脚本,并从命令行启动它:

brew install --cask docker
sudo -H pip3 install --upgrade pip3
open -a Docker
docker-compose ...

之后docker-compose应该工作

这个问题:

$ brew install docker docker-machine
$ docker ps


Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

这显然意味着要做到以下几点:

$ docker-machine create default # default driver is apparently vbox:
Running pre-create checks...
Error with pre-create check: "VBoxManage not found. Make sure VirtualBox is installed and VBoxManage is in the path"
$  brew cask install virtualbox
…
$ docker-machine create default
# works this time
$ docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
$ eval "$(docker-machine env default)"
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

它终于成功了。

如果你不想安装虚拟机,可以使用xhyve驱动。 你也可以安装“docker应用程序”(然后运行它),这显然使你不必运行上面的一些。brew cask install docker然后运行应用程序,看到其他答案。

尝试以下,它的工作现在很好

$ docker-machine create default
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!

然后

$ docker-machine env default

最后

$ eval $(docker-machine env default)
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

我运行brew安装docker-machine;那么问题就解决了。最新版本的docker不包含docker-machine。

安装docker-machine就足以解决这个问题了。

这对我来说很管用:

open --background -a Docker

需要几秒钟才能连接到docker。

我用的是Mac OS大苏尔。

Docker被设计为在Linux上运行。但可以在macOS上的虚拟机中运行。要做到这一点有点费力,这也许就是Docker Desktop存在的首要原因。但这并不意味着你不能在Mac上舒服地使用命令行使用Docker。

一些可以考虑的选项:

  1. 你可以使用秘鲁首都利马并在bash配置文件中添加alias docker='lima nerdctl'
  2. 您可以在您的机器上安装一个Linux虚拟机并使用它(不推荐)。
  3. Mac上的双引导Linux。现在甚至支持T2和M1芯片的机器。

更新版本的VirtualBox (6.1.32r149290),命令docker-machine create --driver virtualbox default不起作用,有一个错误自动生成的虚拟机IP,解释在这里https://stackoverflow.com/a/69745931/2917630

这个命令帮助我解决了问题:docker-machine create --driver virtualbox --virtualbox-hostonly-cidr "192.168.59.3/24" default

打开Docker Desktop对我来说很有用。

安装Docker桌面表单

https://www.docker.com/products/docker-desktop/

转到右上角的设置

  • 转到一般
  • 登录时勾选“开始Docker桌面”

简单快捷

安装Docker桌面表单

https://www.docker.com/products/docker-desktop/

转到右上角的设置

  • 转到一般
  • 登录时勾选“开始Docker桌面”

docker-machine现在已弃用,我发现科利马是一个很好的替代品,你可以用一个简单的命令轻松连接docker守护进程:

brew install docker docker-compose colima
colima start

准备docker:

docker run hello-world

为了扩展其他答案-在花了整个上午的时间在这个确切的问题上,其他答案都没有帮助,最后我发现docker试图访问docker的错误路径。因为几个月前我安装了colima。

运行这个程序帮助我切换回原来的状态:

docker context use default

如果你像我一样在这里Docker Desktop 4.13.0之后,那是因为Docker在默认行为中摆脱了/var/run/docker.sock符号链接!参见发行说明在这里

快速修复:复制“永久解决方案”下的命令;下面

这个问题

我正在经历docker ps(和其他docker客户端命令)工作,但其他与docker交互的库(如supabase CLI)导致:

$ supabase start
Error: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解决方案

现在,你必须手动做一些事情,以便让你的工具找到真正的 docker套接字文件,该文件默认位于~/Library/Containers/com.docker.docker/Data/docker.raw.sock

永久解决方案:手动符号链接

这是一个永久性的解决方案,“undoes”;这个临时的修复。

sudo ln -s ~/Library/Containers/com.docker.docker/Data/docker.raw.sock /var/run/docker.sock
DOCKER_HOST=unix:///var/run/docker.sock docker ps # test that it works using linked socket file

临时解决方案:使用DOCKER_HOST

这将临时使您的命令使用新的套接字文件

DOCKER_HOST=unix:///Users/$(whoami)/Library/Containers/com.docker.docker/Data/docker.raw.sock docker ps

(用你想要的任何命令替换docker ps,比如supabase start)

你也可以让它在你当前的终端会话中工作,或者永远粘贴到你的.zshrc中,使用:

export DOCKER_HOST=unix:///Users/$(whoami)/Library/Containers/com.docker.docker/Data/docker.raw.sock