我通常喜欢在我的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服务吗?
在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警告:无法从守护进程获取默认注册表端点
安装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上工作出色。在我看来,现在不需要安装所有其他无意义的docker了。根据我的经验,minikube附带的VM和安装脚本可以取代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!
Then
$ docker-machine env default
最后
$ eval $(docker-machine env default)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
如果你像我一样在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