在Docker中运行EOS(MAC版)

在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河。记录如下:

安装依赖

  • Docker 版本 17.05或者更高

    testdeMBP:Docker test$ docker -v
    Docker version 18.04.0-ce, build 3d479c0

  • docker-compose version >= 1.10.0

    testdeMBP:Docker test$ docker-compose -v
    docker-compose version 1.21.2, build unknown

Docker需求

  • Docker需要至少7GB内存。(Docker -> Preferences -> Advanced -> Memory -> 7GB or above)
  • 如果下面的build失败了,确保内存的配置满足要求然后再试一次。

编译eos镜像

git clone https://github.com/EOSIO/eos.git --recursive  --depth 1
cd eos/Docker
docker build . -t eosio/eos`

这个过程需要等待一会

上面的命令默认构建master分支的最近提交。如果需要编译运行特定分支/tag,可以使用一个编译参数。例如,你想基于标签v1.0.4生成docker镜像:

docker build -t eosio/eos:v1.0.4 --build-arg branch=v1.0.4 .

默认eosio.system中的符号被设置为SYS。你可以在编译的时候通过symbol参数来覆盖它。

 docker build -t eosio/eos --build-arg symbol=<symbol> .

只启动nodeos docker 容器

docker run --name nodeos -p 8888:8888 -p 9876:9876 -t eosio/eos nodeosd.sh -e arg1 arg2

遇到如下错误:

zexudeMBP:Docker zexu$ docker-machine env default
Error checking TLS connection: Host is not running

解决方法

zexudeMBP:Docker zexu$ docker-machine restart default
Restarting "default"...
Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Machine "default" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Waiting for SSH to be available...
Detecting the provisioner...
Restarted machines may have new IP addresses. You may need to re-run the `docker-machine env` command.zexudeMBP:Docker zexu$ docker-machine env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/zexu/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval $(docker-machine env)
zexudeMBP:Docker zexu$ eval $(docker-machine env)
zexudeMBP:Docker zexu$

获取链信息

首先获取docker中http service的IP地址:

zexudeMBP:Docker zexu$ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.03.1-ce
zexudeMBP:Docker zexu$ docker-machine ip default
192.168.99.100

调用HTTP接口:

curl http://192.168.99.100:8888/v1/chain/get_info

得到如下信息:

{"server_version":"c9b7a247","chain_id":"cf057bbfb72640471fd910bcb67639c22df9f92470936cddc1ade0e2f2e7dc4f","head_block_num":2866,"last_irreversible_block_num":2865,"last_irreversible_block_id":"00000b315494325c32f9e930957f776e3819d4eacdc9d28f8fc6df7149318891","head_block_id":"00000b32b4ea4d06db5c78006c34be993deb952de142e3a186df5ab8312d6116","head_block_time":"2018-06-20T08:06:49.000","head_block_producer":"eosio","virtual_block_cpu_limit":3506516,"virtual_block_net_limit":18419703,"block_cpu_limit":199900,"block_net_limit":1048576}

启动nodeos和keosd容器

docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
docker-compose up -d

执行最后一句时会等待很长一段时间,总共16步。。

Creating network "docker_default" with the default driver
Building builder
Step 1/16 : FROM ubuntu:18.04
6b98dfc16071: Pull complete
4001a1209541: Pull complete
6319fc68c576: Pull complete
b24603670dc3: Pull complete
97f170c87c6f: Pull complete。。。。。

遇到如下错误:

CMake Error at src/bsoncxx/CMakeLists.txt:86 (find_package):Could not find a configuration file for package "libbson-static-1.0" thatis compatible with requested version "1.10.0".    The following configuration files were considered but not accepted:    /usr/local/lib/cmake/libbson-static-1.0/libbson-static-1.0-config.cmake, version: 1.9.3

解决方法如下

    short fix is to change the file builder\Dockerfile line 63 to the following:
RUN git clone --depth 1 -b releases/v3.2 https://github.com/mongodb/mongo-cxx-driver \    the latest stable of mongo-cxx-driver require to update the mongo-driver to be v1.10 and above.

执行完成之后,会启动两个services,nodeosd和keosd。nodeos service将8888和9876端口暴露给主机。keosd不会暴露任何端口,因为它只会被cleos访问,而cleos是运行在keosd容器内部的,详情见下节。

 zexudeMBP:Docker zexu$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMESd78d7b5c831a        eosio/eos           "/opt/eosio/bin/keos…"   28 minutes ago      Up 29 minutes                                                        docker_keosd_12478e62b8825        eosio/eos           "/opt/eosio/bin/node…"   28 minutes ago      Up 29 minutes       0.0.0.0:8888->8888/tcp, 0.0.0.0:9876->9876/tcp   docker_nodeosd_1

执行cleos命令

你可以通过一个bash alias来运行cleos 命令。

alias cleos='docker-compose exec keosd /opt/eosio/bin/cleos -u http://nodeosd:8888 --wallet-url http://localhost:8900'
cleos get info
cleos get account inita

上传样品交换合约:

cleos set contract exchange contracts/exchange/

如果接下来你不需要keosd服务了,你可以使用下面的命令来停止服务:

docker-compose stop keosd 

开发/编译个性化合约

因为eosio/eos镜像没有包含合约开发所需要的依赖包(这是by design的,为了镜像容量小的目的),所以需要使用eosio/eos-dev镜像。这个镜像包含了用eosiocpp编译合约所需要的二进制文件和依赖包。

可以使用Docker Hub上的已有镜像或者进入dev文件夹来手动编译镜像。

cd dev
docker build -t eosio/eos-dev .

修改默认配置

可以使用docker compose覆盖文件的方式来修改默认配置。例如:创建要替换的config2.ini文件和一个docker-compose.override.yml,yml文件的内容如下:

version: "2"services:
nodeos:
volumes:- nodeos-data-volume:/opt/eosio/bin/data-dir- ./config2.ini:/opt/eosio/bin/data-dir/config.ini

然后重启你的docker容器:

docker-compose down
docker-compose up

清理data-dir

使用下面的命令清除用docker-compose命令创建的volume:

docker volume rm nodeos-data-volume
docker volume rm keosd-data-volume

Docker hub

Docker Hub镜像可以从Docker Hub上获取到。创建一个新的docker-compose.yaml文件,内容如下:

version: "3"    services:nodeosd:image: eosio/eos:latestcommand: /opt/eosio/bin/nodeosd.sh --data-dir /opt/eosio/bin/data-dir -ehostname: nodeosdports:- 8888:8888- 9876:9876expose:- "8888"volumes:- nodeos-data-volume:/opt/eosio/bin/data-dir    keosd:image: eosio/eos:latestcommand: /opt/eosio/bin/keosd --wallet-dir /opt/eosio/bin/data-dir --http-server-address=127.0.0.1:8900hostname: keosdlinks:- nodeosdvolumes:- keosd-data-volume:/opt/eosio/bin/data-dir    volumes:nodeos-data-volume:keosd-data-volume:

注意:默认的版本是最新的,可以改成自己需要的

run docker pull eosio/eos:latest
run docker-compose up

EOSIO 1.0 测试网络

可以使用docker镜像可以很容易的在本地创建一个EOSIO 1.0测试网络。运行下面的命令即可:

注意:如果你想使用mogo db插件,你必须在data-dir/config.ini中打开它。

# pull images
docker pull eosio/eos:v1.0.4    # create volume
docker volume create --name=nodeos-data-volume
docker volume create --name=keosd-data-volume
# start containers
docker-compose -f docker-compose-eosio1.0.yaml up -d
# get chain info
curl http://127.0.0.1:8888/v1/chain/get_info
# get logs
docker-compose logs -f nodeosd
# stop containers
docker-compose -f docker-compose-eosio1.0.yaml down

区块数据默认存储在 --data-dir下面,钱包文件默认存储在 --wallet-dir下面,可以根据需要修改他们。

关于MongoDB 插件

现在mogodb插件在config.ini中是默认关闭的,需要你手动修改这个文件或者在docker-compose文件中将config.ini挂载到/opt/eosio/bin/data-dir/config.ini

作者: HarlanC

博客地址: http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

在Docker中运行EOS(MAC版)相关推荐

  1. Docker中运行EOS FOR MAC

    基本要求以及依赖 安装 docker for mac ➡️ https://www.docker.com/products/docker-desktop docker需要7GB+内存.电脑右上角doc ...

  2. 使用 K3d 在 Docker 中运行 Kubernetes 集群

    K3d是一个围绕 Rancher/SUSE K3s Kubernetes 发行版的开源包装器,可让您在 Docker 中运行控制平面.整个堆栈在 Docker 中运行,为您提供轻量级且易于设置的完全容 ...

  3. 在Docker中运行ASP.NET Web API解决方案

    目录 介绍 先决条件 如何容器化现有项目 添加docker-compose项目 带有docker-compose的容器化解决方案 添加环境变量 后端 前端 不使用Visual Studio运行您的应用 ...

  4. docker保护python源码_Tensorflow在Docker中运行和源码编译

    本文分享在在Docker中运行Tensorflow和进行源码编译的方法和步骤,包括:编译.构建docker镜像.创建和运行Docker容器.部署完的容器可以通过Jupyter Notebook进行访问 ...

  5. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  6. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  7. 如何在docker中运行MySQL实例(转载)

    如何在docker中运行MySQL实例 转自:https://blog.csdn.net/siying8419/article/details/79670246 通常初学者学习docker时,不太清楚 ...

  8. zkeacms mysql_在Docker中运行纸壳CMS并配置使用MySql

    纸壳CMS是基于ASP .Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. 方式一 直接运行以下命令即可在docker中运行纸 ...

  9. k3d入门指南:在Docker中运行K3s

    在本文中,我们将简单了解k3d,这是一款可让您在安装了Docker的任何地方运行一次性Kubernetes集群的工具,此外在本文中我们还将探讨在使用k3d中可能会出现的一切问题. 什么是k3d? k3 ...

最新文章

  1. LeetCode简单题之设计停车系统
  2. javascript 实现页面显示当前时间 动态读秒
  3. 查看Android API文档的正确方式
  4. jira以及jira API简单介绍
  5. 删除 jar 的 asset_【unity游戏开发】SDK学习(1)-C#与jar交互
  6. python中if else语句用法_Python中if-else语句的多种写法
  7. 华南农业大学计算机专业学硕20,2020年华南农业大学计算机应用技术考研经验分享...
  8. ubuntu 配置 静态ip
  9. Python之函数的参数
  10. eclipse修改git账号信息
  11. 【leetcode】刷题暂告一个段落
  12. CIO圈子—CIO成长交流的平台
  13. 深交所“区块链50指数”,成分股的成色几何?
  14. 雷霆复鸣 决战巅峰 | 第七届XCTF国际网络攻防联赛总决赛即刻启航!
  15. 流行的任天堂电子游戏模拟器 Cemu 计划开源并支持 Linux
  16. 锁定计算机耗电吗,我想知道电脑在待机情况下费电吗?
  17. python复数的概念及运算_python 复数运算
  18. 蘑菇模拟器TV版 for Android,真实采集蘑菇模拟器
  19. NIST指纹数据识别(二)数据处理
  20. R12_专题知识总结提炼-AP模块

热门文章

  1. 无线群控服务器转让,群控系统无限开接手的项目
  2. KafkaConsumer源码翻译(中英对照)
  3. Yii2 用户登录
  4. 获取页面form表单对象的方式
  5. iOS 手机 邮箱 正则表达式
  6. 从零玩转第三方登录之WeChat公众号登陆-cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi-wechat-gong-zhong-hao-deng-lu...
  7. Lucene 中 .fdx 和 .fdt 和.tis和.tii 还有.cfs含义
  8. echarts折线图动态多条线
  9. 大数据时代如何保障数据安全
  10. 项目 cg day04