Windows探索体验长安链Golang智能合约03

314 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

本文已参与「开源摘星计划」,欢迎正在阅读的你加入。活动链接:github.com/weopenproje…

在第一篇文章中,通过挂载本机Docker的通信socket文件到容器内,从而实现Docker in Docker的方式,实际叫做DooD,即Docker outside of Docker

正宗的DinD,即在容器内启动Docker守护进程。Windows有办法实现么?

答案就在Docker官方维护的Docker官方镜像中:

image.png

Tags标签页,搜索框搜索dind。可以看到官方维护的DinD镜像。使用命令启动DinD容器:

docker run --privileged --name dind -d docker:dind

使用--privileged命令开启特权模式,让容器可以获取、控制主机的设备。

image.png

进入dind容器中,可以看到使用的是Alpine系统:

image.png

将长安链部署文件复制进容器内,需要unzip来解压缩,Alpine系统的包管理器为apk(跟安卓APP包一个名字):

apk add unzip

解压缩后,试着运行长安链:

因为一直报错,这里我注释掉了restart.sh里关于Docker启动的部分

image.png

发现报错了,缺少gcc和一个名为ld-linux-x86-64.so.2的库。通过安装gccgoogle解决:

apk add gcc

Error loading shared library ld-linux-x86-64.so.2: on Alpine Linux

再次运行:

image.png

还是报错,看来只能求助官方了:

image.png

如果后续有解决方案,我会发一篇文章出来。

如果Alpine系统不行,我们换一个其他的Linux系统的DinD镜像呢?

我找到一个非官方的,基于centos系统的DinD镜像:

image.png

让我们试试看:

docker run --privileged --name dind2 -d kran0/dind-centos:latest

image.png

它好像并没有成功启动,点开查看下日志:

image.png

答案揭晓了,还是cgroup的问题。

目前来看,DinD这条路是走不通了。那么在Windows系统下还有没有其他办法呢?

下一章继续探索~