![](/img/trans.png)
[英]macOS - docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[英]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并附加到它。
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
请参阅: Mac 版 Docker 入门。
docker-machine
依赖于安装的 VirtualBox,如果不是这种情况,将会失败。 如果您已经拥有 VirtualBox,则可以跳过此步骤。
brew cask install virtualbox
您需要主动接受在 OS X 安全面板中加载 Virtualbox 内核扩展,然后继续重新启动机器以使下一个命令不会因Error: VBoxNetAdpCtl: Error while adding new interface
失败Error: VBoxNetAdpCtl: Error while adding new interface
docker-machine
创建一台default
机器(如果没有,请参阅: docker-machine ls
):
docker-machine create --driver virtualbox default
然后为 Docker 客户端设置环境:
eval "$(docker-machine env default)"
然后通过列出容器来仔细检查:
docker ps
请参阅:开始使用 Docker 机器和本地 VM 。
有关的:
我有 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=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 说它正在运行,而且诊断很好。 我需要取消设置一些遗留环境变量(感谢https://docs.docker.com/docker-for-mac/troubleshoot/#workarounds-for-common-problems )
unset DOCKER_HOST
unset DOCKER_CERT_PATH
unset DOCKER_TLS_VERIFY
您应该执行安装 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?"
解决方案:
所以我按照另一条评论中的建议进行了下一步:
brew install --cask docker
从上面的@friederbluemle 回答中可以得到接下来的解释:“因为 docker 是系统级的 package,您不能使用 brew install 安装它,必须使用 --cask 代替。” 我想最初我用brew install
安装了 Docker ,所以这可能是这个问题的一部分。
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 的乐趣。
需要考虑的一些选项:
alias doocker='lima nerdctl'
添加到您的 bash 配置文件中。随着 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 设置在右上角
快速简单
安装 Docker 桌面形式给定 url
https://www.docker.com/products/docker-desktop/
Go 设置在右上角
如果您在 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
我的问题只需在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
brew cask install docker-toolbox
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.