简单介绍
Docker 是一款非常方便的虚拟化工具,与传统的虚拟化工具区别在于虚拟的层次,显然 Docker 是属于操作系统层面的。即同一个内核,利用类似命名空间的方法来虚拟出多个轻量级互不可见的运行环境沙箱。
Docker 的一个重要特性是自身复制和高兼容性,两个方法可以让 Docker 镜像在远端服务器迅速复制出一个和本地一致的运行环境。
- 使用 Dockerfile,只需把安装本地环境的过程记录到 Dockerfile 文件 并将之上传到服务器构建。
- 把整个本地环境 commit 成镜像,并且 docker push 到服务器的 Docker registry。很好,这很 git push
失效问题
Docker 在 Linux 上通过命令行直接操作系统来进行应用环境虚拟化;在 macOX 和 Windows 上的原理是以虚拟机为运行核心,通过ssh让命令行可以和虚拟机进行交互来完成。
启动 docker 有两种模式:
问题就出在当命令行工具 如:iterm2 升级后,点击 Docker Quickstart Terminal 图标并没有启动 macOX 的 default 虚拟机,只打开普通的终端。
在没有连接上虚拟机情况下,大部分 docker 命令会返回:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
原因
更新命令行工具会导致快捷启动失效,docker状态正常,但不会启动 deamon 服务端
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
基本上所有和服务端有交互的功能都不能用,在 macOS 下, docker 采用虚拟机模式来实现兼容,没有和 linux 那么原生,简单来讲就是 Docker Quickstart Terminal 不能触发启动虚拟机。
解决方法:
Docker Quickstart Terminal 本身是启动自身 app 包中的一个 start.sh 脚本文件,我用的是 item2 如果更新就会导致无法启动这个脚本。
解决方法有三:
- 重新安装 Docker Quickstart Terminal 会修复这种默认打开模式
- 使用 alias 运行 app 包里的脚本文件
alias dockerup="sh /Applications/Docker/Docker\ Quickstart\ Terminal.app/Contents/Resources/Scripts/start.sh"
添加完之后无需点击 Docker Quickstart Terminal 或其他客户端来启动 docker 服务端,当出现 Is the docker daemon running on this host?
,直接使用 dockerup
命令行来启动。
- 替换 app 包中的启动脚本,修复为兼容 iTrem2
https://gist.github.com/gnachman/f61614d0335e185787b0/ea7a3f7b248390efa886557f6917e12a6c9c0cd6
注:先复制原文件出来,使用 open -a "Script Editor" 来打开 applescript 文件,修改后保存到桌面,再重新替换进去,需授权。包内内容无法直接修改。