Docker Machine 是 Docker 官方推出用来取代原来 boot2docker 的工具,其实我感觉就是把原来的 boot2docker 再次包装了一层?给了一个统一化的管理方式,但是这下问题来了,原来我们使用的 DaoCloud 的加速器服务在这里该怎么使用了呢?
先看了下docker-machine
的大概操作,里面有个
ssh Log into or run a command on a machine with SSH.
可以提供一个交互式的 shell,但是坑就在这里,即使你登上去在/var/lib/boot2docker/profile
里修改了EXTRA_ARGS
结果你运行了
docker-machine restart default
docker-machine env default
之后,整个文件就会被还原……简单的上 GDB 下断看了下调用栈发现是 ConfigureAuth 调用了 GenerateDockerOptions 所导致的问题……但是为啥会调用 ConfigureAuth 就不清楚了噜,不懂 Go 怎么调源码_(:з」∠)_
。
那应该是使用的逻辑不一样了,docker-machine
的逻辑是每次重启一个 VM 然后设置环境时都会被还原到初始化的状态,所以按照设计者的逻辑而言需要你在create
的时候就指定--engine-registry-mirror
。
那么跟着官方文档我们新建一个 VM 的时候就像是这样:
docker-machine create -d virtualbox --engine-registry-mirror http://********.m.daocloud.io dev
然后等新建完成后用docker-machine env dev
啥的切换你使用的docker
的后端。
那么问题又来了,有没有办法修改已存在 VM 的--engine-registry-mirror
呢?
答案是坑定的,你需要人为地修改这个文件~/.docker/machine/machines/default/config.json
,找到里面有个RegistryMirror
字段,是个 list,大概就插入你的镜像地址"http://********.m.daocloud.io"
,然后再重启你就会在/var/lib/boot2docker/profile
看见一个--registry-mirror http://********.m.daocloud.io
了。
但是为啥我用了 Mirror docker pull debian
的时候还是从docker.io
上下 image 呢?
我也不知道发生了啥:
time="2015-08-17T08:40:58.129505060Z" level=debug msg="Trying to pull debian from http://********.m.daocloud.io/ v2"
time="2015-08-17T08:40:58.838492184Z" level=debug msg="Pulling tag from V2 registry: \"latest\""
time="2015-08-17T08:40:58.953815999Z" level=debug msg="Error trying v2 registry: Error parsing HTTP response: invalid character '<' looking for beginning of value: \"<!DOCTYPE HTML PUBLIC \\\"-//W3C//DTD HTML 3.2 Final//EN\\\">\\n<title>404 Not Found</title>\\n<h1>Not Found</h1>\\n<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>\\n\""
time="2015-08-17T08:40:58.953885554Z" level=debug msg="Trying to pull debian from https://registry-1.docker.io v2"
在访问http://********.m.daocloud.io/v2
时出现了 404,然后 docker 就往官方源上找了噜(╯‵□′)╯︵┻━┻。