开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:github.com/weopenproje…
在第一篇文章中,通过挂载本机Docker的通信socket文件到容器内,从而实现Docker in Docker的方式,实际叫做DooD,即Docker outside of Docker。
正宗的DinD,即在容器内启动Docker守护进程。Windows有办法实现么?
答案就在Docker官方维护的Docker官方镜像中:
在Tags标签页,搜索框搜索dind。可以看到官方维护的DinD镜像。使用命令启动DinD容器:
docker run --privileged --name dind -d docker:dind
使用
--privileged命令开启特权模式,让容器可以获取、控制主机的设备。
进入dind容器中,可以看到使用的是Alpine系统:
将长安链部署文件复制进容器内,需要unzip来解压缩,Alpine系统的包管理器为apk(跟安卓APP包一个名字):
apk add unzip
解压缩后,试着运行长安链:
因为一直报错,这里我注释掉了
restart.sh里关于Docker启动的部分
发现报错了,缺少gcc和一个名为ld-linux-x86-64.so.2的库。通过安装gcc和google解决:
apk add gcc
Error loading shared library ld-linux-x86-64.so.2: on Alpine Linux
再次运行:
还是报错,看来只能求助官方了:
如果后续有解决方案,我会发一篇文章出来。
如果Alpine系统不行,我们换一个其他的Linux系统的DinD镜像呢?
我找到一个非官方的,基于centos系统的DinD镜像:
让我们试试看:
docker run --privileged --name dind2 -d kran0/dind-centos:latest
它好像并没有成功启动,点开查看下日志:
答案揭晓了,还是cgroup的问题。
目前来看,DinD这条路是走不通了。那么在Windows系统下还有没有其他办法呢?
下一章继续探索~