在Docker中运行EOS(MAC版)
在Docker中运行EOS(MAC版)
在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河。记录如下:
安装依赖
Docker 版本 17.05或者更高
testdeMBP:Docker test$ docker -v
Docker version 18.04.0-ce, build 3d479c0docker-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" that
is 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d78d7b5c831a eosio/eos "/opt/eosio/bin/keos…" 28 minutes ago Up 29 minutes docker_keosd_1
2478e62b8825 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:latest
command: /opt/eosio/bin/nodeosd.sh --data-dir /opt/eosio/bin/data-dir -e
hostname: nodeosd
ports:
- 8888:8888
- 9876:9876
expose:
- "8888"
volumes:
- nodeos-data-volume:/opt/eosio/bin/data-dir
keosd:
image: eosio/eos:latest
command: /opt/eosio/bin/keosd --wallet-dir /opt/eosio/bin/data-dir --http-server-address=127.0.0.1:8900
hostname: keosd
links:
- nodeosd
volumes:
- 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
在Docker中运行EOS(MAC版)的更多相关文章
- Docker中运行EOS FOR MAC
基本要求以及依赖 安装 docker for mac ➡️ https://www.docker.com/products/docker-desktop docker需要7GB+内存.电脑右上角doc ...
- 在Docker中运行torch版的neural style
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 在Docker中运行to ...
- 在docker中运行jenkins实现代码自动发布到测试服务器
在docker中运行jenkins 用的镜像是apline版:lts-alpine,并设置正确的时区. docker run --name jenkins_master -d \ -p 8081:80 ...
- 如何让传统ASP.NET网站在Docker中运行
本文主要描述如何让传统ASP.NET网站在Docker中运行,侧重Docker image 搭建. 使用条件: Docker for windows 用户切换到Windows 容器模式 Windows ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- .NET Core Web 应用部署到 Docker 中运行
环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...
- docker中运行ASP.NET Core Web API
在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...
- ASP.NET Core 网站在Docker中运行
Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...
- 在Docker中运行纸壳CMS并配置使用MySql
纸壳CMS是基于ASP.Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. GitHub:https://github.com/ ...
随机推荐
- 团队项目7——团队冲刺beta版本目录
Beta版本冲刺计划及安排http://www.cnblogs.com/zy-96/p/8017331.html 第二次项目冲刺(Beta版本12.04) www.cnblogs.com/zy-96/ ...
- 给VMware下的Linux扩展磁盘空间(以CentOS6.3为例)
参照这篇文章进行的,但是和作者的步骤有些不一样. #查看挂载点:df -h#显示: 文件系统 容量 已用 可用 已用%% 挂载点/dev/mapper/vg_dc01-lv_root 47G 12G ...
- springboot+mybatis结合使用
springboot+mybatis结合使用与普通的ssm配置差别不大,但是少了很多的配置,如spring.xml web.xml, 给程序员减轻了很多负担 首先创建带有mybatis框架的项目 ...
- 平时在PHP编码时有没有注意到这些问题
编出一手好代码,这个是需要你在平时开发中日积月累的,平时如果你有注意到以下的那些代码的编码,那么祝贺你,你在技能提升这方面已经垫下了一些基础,编写出一手好代码,说白了就是你特么注意到性能这块的问题,代 ...
- 移动端web开发整理
/* 移动端定义字体的代码 */body { font-family: "Helvetica Neue", Helvetica; } ios端触摸时,会出现一个半透明灰色遮罩 如果 ...
- C#动态对象(dynamic)示例(实现方法和属性的动态)
C#的动态对象的属性实现比较简单,如果要实现动态语言那种动态方法就比较困难,因为对于dynamic对象,扩展方法,匿名方法都是不能用直接的,这里还是利用对象和委托来模拟这种动态方法的实现,看起来有点J ...
- 【题解】 bzoj2748 [HAOI2012]音量调节 (动态规划)
懒得复制,戳我戳我 Solution: 傻逼题目,直接dp就可以了,他是求最后一次的最大值 Code: //It is coded by Ning_Mew on 4.17 #include<bi ...
- 【agc002f】Leftmost Ball(动态规划)
[agc002f]Leftmost Ball(动态规划) 题面 atcoder 洛谷 题解 我们从前往后依次把每个颜色按顺序来放,那么如果当前放的是某种颜色的第一个球,那么放的就会变成\(0\)号颜色 ...
- 【CF949D】Curfew(贪心)
[CF949D]Curfew(贪心) 题面 CF 洛谷 破池姐姐翻译好强啊 题解 今天菊开讲这题,我大力猜想一波说肯定从中间有个分界线,他还说可能是假的 大力贪心就好了,从两边往中间考虑,只要这个房间 ...
- python之旅:异常处理
一 什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 一个异常分为三部分 ...