之前安装过Docker Toolbox来实现在Mac上面跑Docker,后来Docker又出了一个Docker for Mac,好奇心一起就卸了Docker Toolbox,装了它。

愿意尝试的原因是Docker Toolbox主要是用VirtualBox来放container,Mac环境里面相关的docker命令其实都是代理,最终的实现是在VirtualBox里面。而Docker for Mac用的是macOS的一个框架HyperKit来实现的,不需要使用VirtualBox来做中间代理,性能上会有很大的提升。当然,前提是你的系统是升级到了macOS10.11。

顺利安装和启动Docker for Mac之后,在命令行运行docker info命令,会出现如下错误。

could not read CA certificate "/Users/{{username}}/.docker/ca.pem": open /Users/{{username}}/.docker/ca.pem: no such file or directory

在网上找了不少解决方式,

bash_profile

尝试了下这个网址里面说的https://github.com/boot2docker/osx-installer/issues/126
我的用户目录下没有.bash_profile的文件,我是用的zsh,所以在.zsh_rc找了找(安装Docker Toolbox是很久之前的事情了,根本不记得当初怎么安装的),意外的也找到了当初配置的一些DOCKER_*的环境变量。注释,重启zsh,再次运行docker info,还是不行。

docker machine

然后又继续尝试上面网址里面,后续给的方法:

docker-machine regenerate-certs default

 egenerate TLS machine certs?  Warning: this is irreversible. (y/n): y
 Regenerating TLS certificates
 Host does not exist: "default"

失败。

既然是说default不存在,那我就来创建一个

查看了docker-machine相关的命令,刚好有一个create命令,执行了一下:

docker-machine create default
 Creating CA: /Users/{{username}}/.docker/machine/certs/ca.pem
 Creating client certificate: /Users/{{username}}/.docker/machine/certs/cert.pem
 Running pre-create checks...
 Error with pre-create check: "exit status 126"

搜了一下关于exit status 126 的相关错误,说的是没安装VirtualBox,这时候我觉得不对劲了,因为跑Docker for Mac是不需要VirtualBox的啊。

正式看了一下docker machine是什么东西,原来是一个用来方便的管理多种类型的docker主机的一个工具,可以是虚拟机,本地主机和云平台,具体可以看看这个链接:https://yeasy.gitbooks.io/docker_practice/content/machine/usage.html

顺便推荐一下这本电子书《Docker —— 从入门到实践》

看完docker machine的作用,可以看的出来,这和我现在想做的事情和遇到的问题,没有太大干系。我是安装完了Docker的环境,然后在执行docker命令的时候出现了问题,不是在已经有container的时候在维护上出了问题。

环境变量

这时候我开始回到官网来追根溯源了,很幸运的找到一篇深入比较Docker for Mac和Docker Toolbox的文章:Docker for Mac vs. Docker Toolbox

这个对于Docker for Mac和Docker Toolbox各自的实现机制说的十分透彻,同时还意外的有一个Setting up to run Docker for Mac章节,说了如何配置Docker for Mac的环境,在你已经或者曾经安装过Docker Toolbox的情况下。

按照上面说的执行命令

env | grep DOCKER

顺利的找到了所有的DOCKER_*的环境变量

对对应的变量执行 unset

 unset DOCKER_TLS_VERIFY
 unset DOCKER_CERT_PATH
 unset DOCKER_MACHINE_NAME
 unset DOCKER_HOST

再次执行

env | grep DOCKER

保证环境变量已经清除。

然后执行

docker info

一个正常的信息列表出来了

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
...

以上就是整个debug的过程。其实这么折腾,主要还是自己不是很了解docker,得抽空再好好看看上面说的那本电子书才行了。

最近因为工作的原因,开始使用mac进行开发。这也算是往头一回进行ios环境下的开发,也是着实遇到了一些问题。就比如chrome下的flash。

chrome是自带flash的,按理说,不管那个平台下面(手机端不算),flash都是能正常工作的,可是偏偏就是有问题了。

在网上看了下解决方式:

第一步:在新标签页打开chrome://plugins/

打开chrome组件的方式

第二步:点击右上角的“详细信息”按钮

点击详细信息按钮

第三步:停用

查看Adobe Flash Player对应的下面是不是有两个或者多个组件,如果有,则停用,只保留一个(如果只有一个,那就先通过Safari去安装一个flash,再重复第三步)。

一般最后不要保留chrome自带的那个flash——类型为PPAPI(进程外插件)的,问题很可能就出在那上面。

停用PPAPI的Flash插件

完成以上三步之后,重启浏览器或者刷新一下刚刚打开的含有flash的页面,应该就能正常工作了。如果不可以,那就试着启用之前禁用的,禁用之前启用的,切换一下试试。要是再不行,那就没法了。

参考文章:
http://www.howtogeek.com/tips/how-to-fix-flash-videos-having-no-sound-in-chrome-on-mac-os-x/
http://helpx.adobe.com/flash-player/kb/enable-system-flash-player-google-chrome.html