最近开始使用docker,一来是镜像开实例要比新建虚拟机要方便不少,二来docker发展的也相对成熟了,有了docker-toolbox这种一键安装包,docker-hub在国内也有各种各种镜像库了,资源获取比刚出来那阵要方便多了。不过坑还是不少,此总结下。

安装

安装推荐使用docker-toolbox,由于前面使用vagrant已经安装了virtual box,就不需要安装了,没有的话可以到oracle官网下载。

镜像

找镜像

docker镜像在docker-hub可以下到,不过速度较慢,推荐国内几个两个资源
阿里hub
daocloud

docker pull stuck

docker pull了一半,由于有其他事,机器暂时待机了,唤醒机器后,docker pull就卡着不动了。
检查网络没有任何,等了几分钟左右,进度没有任何变化,只好强制中断。再次docker pull同一个镜像,下载进度还是从刚下载的地方开始,进度没有任何改变。

没办法,只能想办法把下了一半的镜像,找到手动删除(固态硬盘的空间还是很宝贵的,一个镜像占掉了近1个G)。

>docker info
/mnt/sda1/var/lib/docker

可以找到docker主目录/var/lib/docker/,下好镜像存放在/var/lib/docker/image里,但没有刚下了一半的镜像。

docker@default:/mnt/sda1/var/lib/docker$ sudo ls
aufs        containers  image       network     tmp         trust       volumes

ls下tmp目录,目录大小跟刚下载一半的镜像大小一样,可见下一半的东西就在这了,删除了此目录
继续docker pull,仍然没法继续下载,应该在某个地方还有下载缓存,最后一招,重启docker-machine

docker-machine restart

再次尝试docker pull,终于开始重头下载了。

Error checking TLS connection: Error checking and/or regenerating the certs

由于docker-machine的ip是动态分配的,重启过一两次后,可能会分配一个不同的IP,需要重新生成证书才能ssh登录docker-machine。
还一种解决方法就是设个固定IP,下面讲下如何配固定IP。

docker-machine 设置静态IP

docker-machine的linux版本是Core Linux,不是发行版,没法直接配静态IP。查看机器进程后,发现默认是通过udhcpc获取一个动态IP,重启后,有可能获取到不一样的IP。

虽然可以通过docker-machine env default,获取到$DOCKER_HOST,但在需要固定IP的场合,还是比较麻烦。
搜集资料后发现,docker-machine没有固定IP这个已经在github上提过一个issue,目前还没有修复,评论里有种方法测试可行:
在/var/lib/boot2docker目录新建bootsync.sh,文件内设定固定IP

ifconfig eth1 192.168.99.150 netmask 255.255.255.0 broadcast 192.168.99.255 up

但是此方法设定的IP在机器启动每20分钟左右,就会被后台启动的dhcp client重新获取一次IP,IP被设置成了新IP。

目前,临时解决方案有两种:

  • 把dhcp client关掉,dhcp client启动脚本可以在启动目录/etc/rc.d 找到,文件名dhcp.sh
if [ $DEVICE = "eth1" ]; then
     ifconfig eth1 192.168.99.150 netmask 255.255.255.0 broadcast 192.168.99.255 up
else
    ...
fi

在文件内的for循环加了个判断条件,如果是eth1网卡,则设定固定IP,else 其他网卡默认还通过dhcp获取IP

  • 不需要关闭dhcp client的方法,写个计划任务,1分钟重新设定一次IP
*/1 * * * * ifconfig eth1 192.168.99.150 netmask 255.255.255.0 broadcast 192.168.99.255 up
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐