繁体   English   中英

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

[英]Cannot connect to the Docker daemon on macOS

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

我能够安装 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 服务?

在受支持的 Mac 上,运行:

brew install --cask docker

然后启动Docker应用程序。 点击下一步。 它将要求特权访问。 确认。 鲸鱼图标应出现在顶部栏中。 单击它并等待“Docker 正在运行”出现。

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

docker ps

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

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

在 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 cask install virtualbox
  • 手动使用Virtualbox.org上的版本

您需要主动接受在 OS X 安全面板中加载 Virtualbox 内核扩展,然后继续重新启动机器以使下一个命令不会因Error: VBoxNetAdpCtl: Error while adding new interface失败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 机器和本地 VM


有关的:

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

docker-machine restart

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

eval $(docker-machine env default)

我也在这里回答

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

如果你像我一样在 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

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

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

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 create default

在 OSX 上确保您在发布之前已启动 Docker 应用程序

docker ps

docker build ... 等等 ... 是的,发行

docker --version

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

对我来说重新启动 docker,没有帮助。 (通过终端和用户界面尝试过)

以下选项未选中,所以我选中了它。 在此之后我能够运行我的容器设置 - >高级 - >启用默认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

Docker for Mac 已弃用。 而且你不需要 Homebrew 在 Mac 上运行 Docker。 相反,您可能想要安装 Docker Desktop,或者如果已经安装,请确保它是最新的并且正在运行,然后再次尝试连接到套接字。

在此处输入图片说明

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

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

之后docker-compose应该可以工作了

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

brew install docker docker-compose colima
# make coffee
colima start

准备停靠:

docker run hello-world

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

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

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

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

希望这对其他人有帮助!

这个问题:

$ 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 Desktop 对我有用。

安装 minikube 并加入黑暗面。

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 上运行良好。 这些天 IMO 无需安装所有其他 docker 废话。 根据我的经验,minikube 自带的虚拟机和安装脚本可以代替 docker 机器。

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

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

运行这个帮助我切换回来:

docker context use default

我的另一个解决方案(在 Apple Silicon 上)是安装rancher或 Podman,但 Podman 在导入库时遇到一些问题(即用于 Rust 的paho_mqtt )。

brew install rancher

然后启动应用程序并选择启动虚拟机的服务。

我有类似的问题。 也许我的特殊案例/解决方案也可以帮助其他人。

先决条件:

我有 MacOS(M1 芯片)并安装了 Docker App。 Docker 引擎 v20.10.23。

在我的特殊情况下,我尝试使用 IntelijIdea 在 Maven 中运行spring-boot:build-image命令来为服务制作 Docker 图像。

作为回应,我有 - [2] No such file or directory

在 IntelijIdea 控制台中,我[INFO] I/O exception (java.io.IOException) caught when processing request to {}->docker://localhost:2376: com.sun.jna.LastErrorException: [2] No such file or directory

因此,最初,我在 Mac 终端docker ps中运行。 它返回"Cannot connect to the Docker daemon at tcp://localhost:2376. Is the docker daemon running?"

解决方案:

所以我按照另一条评论中的建议进行了下一步:

  1. 在终端运行brew install --cask docker从上面的@friederbluemle 回答中可以得到接下来的解释:“因为 docker 是系统级的 package,您不能使用 brew install 安装它,必须使用 --cask 代替。”

我想最初我用brew install安装了 Docker ,所以这可能是这个问题的一部分。

  1. 运行 Docker 应用程序
  2. 在终端中运行export DOCKER_HOST=unix:///var/run/docker.sock

之后,当我在终端docker ps中运行时,它返回表列CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES和命令 spring-boot:build-image 工作正常。

即使在 Mac Ventura 13.3.1 上也对我有用的一个技巧是

stop docker

移除 docker 袜子

sudo rm /var/run/docker.sock

再次启动 docker。

我首先通过自制软件尝试了 docker 和 docker-compose,但这里列出了问题。 我必须从https://docs.docker.com/docker-for-mac/install/安装 docker 的官方安装,然后一切都按预期工作。

我只需要运行 Spotlight 搜索并在brew cask install创建的 /Applications 文件夹下执行 Docker 应用程序。 运行后,它会要求完成安装。 然后我就可以运行docker ps

尝试了以下操作,现在工作正常

$ 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 install docker-machine; 那么问题就解决了。 最新的 docker 版本不包含 docker-machine。

安装docker-machine足以让我解决问题。

这对我有用:

open --background -a Docker

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

Docker 被设计为在 Linux 上运行。 但是,它可以在 macOS 上的 VM 中运行。 这样做有点麻烦,这也许就是 Docker Desktop 最初存在的原因。 但这并不意味着您不能在 Mac 上舒适的命令行中享受使用 Docker 的乐趣。

需要考虑的一些选项:

  1. 您可以使用lima并将alias doocker='lima nerdctl'添加到您的 bash 配置文件中。
  2. 您可以在您的机器上安装 Linux VM 并改用它(不推荐)。
  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

尝试:

brew install --cask docker

然后启动 Docker 应用程序。 点击下一步。 它将要求特权访问。 确认。 鲸鱼图标应出现在顶部栏中。 单击它并等待“Docker 正在运行”出现。

你现在应该可以运行 docker 命令了:

docker ps

安装 Docker 桌面形式给定 url

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

Go 设置在右上角

  • 后藤将军
  • 登录时勾选 Start Docker Desktop

快速简单

安装 Docker 桌面形式给定 url

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

Go 设置在右上角

  • 后藤将军
  • 登录时勾选 Start Docker Desktop

如果您在 Mac OSX 上使用 lima 时遇到此问题,请使用 limactl list 检查以确保 docker 实例正在运行。 在我的例子中,默认实例正在运行,但 docker 在重启后没有运行。 您可能希望将limactl start docker添加到您的 Shell 配置中,例如~/.zshrc

➜ docker ps
Cannot connect to the Docker daemon at unix:///Users/xxxx/.lima/docker/sock/docker.sock. Is the docker daemon running?

➜ limactl list

NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
docker     Stopped    127.0.0.1:50310    qemu      x86_64    4       4GiB      100GiB    ~/.lima/docker

➜ limactl start docker

...(lima log output)

➜ limactl list

NAME       STATUS     SSH                VMTYPE    ARCH      CPUS    MEMORY    DISK      DIR
default    Running    127.0.0.1:60022    qemu      x86_64    4       4GiB      100GiB    ~/.lima/default
docker     Running    127.0.0.1:50310    qemu      x86_64    4       4GiB      100GiB    ~/.lima/docker

➜ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

https://www.docker.com/获取正确的链接。

英特尔芯片或Mac芯片。 然后手动安装。

之后它应该可以正常工作。

我的问题只需在Ventura 13.0 (M2 Pro CPU 架构)上运行以下命令即可解决,就像在 Linux 发行版上运行的命令一样:

sudo chown $USER /var/run/docker.sock

然后你应该退出你的帐户或重新启动 Docker 桌面,你可以通过执行docker ps命令来评估它是否正常工作。

Docker Toolbox 和 Docker Machine 都已被弃用。 Docker Desktop 是官方推荐的替代品。

原始答案我发现 Docker Toolbox 可以通过 brew/cask 获得

安装自制软件

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install )"

安装木桶

brew install caskroom/cask/brew-cask

安装 docker 工具箱

brew cask install docker-toolbox

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM