我通常喜欢在我的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服务吗?


当前回答

如果你像我一样在Docker Desktop 4.13.0之后来到这里,那是因为Docker取消了/var/run/ Docker。袜子符号链接默认行为!点击这里查看发布说明。

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

这个问题

我正在经历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。

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

这是一个永久性的解决方案,可以“撤销”这个临时修复。

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

其他回答

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

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命令: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

参见:开始使用Mac版Docker。

Virtualbox安装

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

使用Homebrew: brew install—cask virtualbox 手动使用Virtualbox.org上的发行版

您需要在OS X安全面板中主动接受加载Virtualbox内核扩展,然后继续重新启动机器,以便在添加新接口时,下一个命令不会出现Error: VBoxNetAdpCtl: Error失败

在macOS上配置docker-machine

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

docker-machine create --driver virtualbox default

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

eval "$(docker-machine env default)"

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

docker ps

请参见:从Docker Machine和本地VM开始。


相关:

Brew安装docker不包括docker引擎? 对于Linux,请参见:Docker无法连接到Docker守护进程 对于Windows,请参见:Docker警告:无法从守护进程获取默认注册表端点

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

docker-machine create——driver virtualbox——virtualbox-host -cidr "192.168.59.3/24" default。

尝试这样创建默认值。

docker-machine create default

如果你像我一样在Docker Desktop 4.13.0之后来到这里,那是因为Docker取消了/var/run/ Docker。袜子符号链接默认行为!点击这里查看发布说明。

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

这个问题

我正在经历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。

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

这是一个永久性的解决方案,可以“撤销”这个临时修复。

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