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

411 阅读2分钟

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

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

根据官方文档,要想运行Go语言编写的智能合约,需要在Linux系统下部署和运行DockerGo虚拟机,还需要在Linux系统进行编译。

如果想要在Windows下进行,要怎么办呢?我们继续通过折腾Docker看是否能实现。

根据官方文档,我们在配置长安链的时候要勾选DOCKER_GO虚拟机:

image.png

在"部署长安链"页面,根据提示,我们需要Docker的支持:

image.png

这时,就处于一个尴尬的处境。看过之前文章小伙伴知道,我们的Linux系统就是基于Docker技术启动的一个容器。而部署DockerGo需要我们在这个容器内再启动一个Docker服务。

这种需求有个专门的说法,叫Docker in Docker,或者简称为dind

在Windows平台,我们可以通过将主机Docker服务的通信socket挂载到容器内,让容器内的Docker通过挂载的socket来与主机Docker服务通信,从而实现容器内使用Docker的目的。

注意,这时启动的任何容器,都是挂在主机的Docker服务上的。

好的,我们说干就干,通过下面命令,在启动容器时挂载目标socket

docker run -d --rm --net host --name centos77 -v "//var/run/docker.sock:/var/run/d ocker.sock" centos7
  • 注意,在Windows平台,我们需要在/var/run/docker.sock前再添加一个/,即//var/run/docker.sock
  • 我们配置了--net host,即在网络上和主机融合,这样我们就不需要配置端口映射了。不过要注意避免端口冲突
  • 使用--rm命令,会自动删除已经存在的同名容器。如果有跟随前面文章操作的小伙伴,这里就可以省事了。

我们在容器内安装Docker并且使用Docker ps命令:

image.png

可以看到,我们在容器内访问到了主机Docker的容器列表。

ok,我们上面已经可以在Docker内使用Docker了。下一章,我们部署长安链,看看是否能成功。