# 鍚姩鏀寔Docker_VM鐨勯摼

## 閫氳繃绠$悊鍙板惎鍔ㄥ惎鐢―ocker铏氭嫙鏈虹殑閾�

<a id='3.1.1'></a>

### 鐧诲綍
<img loading="lazy" src="../images/ManagementLogin.png" style="zoom:50%;" />

- 绉佹湁鍖栭儴缃叉湰骞冲彴鏃朵細鐢熸垚鐨勫搴旂殑admin璐﹀彿锛岄粯璁ゅ瘑鐮佷负a123456

<a id='3.1.2'></a>

#### 鏂板缁勭粐璇佷功
<img loading="lazy" src="../images/ManagementAddOrgCert.png" style="zoom:50%;" />

- 濉啓缁勭粐ID鍜岀粍缁囧悕绉�
- 缁勭粐鍜屽拰缁勭粐鍚嶇О涓嶈兘閲嶅
- 鏀寔鐢宠鍥藉瘑鍜岄潪鍥藉瘑涓ょ璇佷功銆�


#### 鏂板鑺傜偣璇佷功
<img loading="lazy" src="../images/ManagementAddNodeCert.png" style="zoom:50%;" />

- 鐩墠鑺傜偣璇佷功瑙掕壊鍒嗕负鍏辫瘑鑺傜偣鍜屽悓姝ヨ妭鐐逛袱绉嶃€�
- 閫氳繃濉啓鑺傜偣鍚嶇О銆佺粍缁囦俊鎭紝鑺傜偣瑙掕壊锛岀敵璇疯妭鐐硅瘉涔︺€�
- 鏀寔鐢宠鍥藉瘑鍜岄潪鍥藉瘑涓ょ璇佷功銆�


#### 鏂板鐢ㄦ埛璇佷功
<img loading="lazy" src="../images/ManagementAddUserCert.png" style="zoom:50%;" />

- 鐩墠鐢ㄦ埛璇佷功瑙掕壊鍒嗕负admin銆乧lient鍜宭ight涓夌銆�
- 閫氳繃濉啓鐢ㄦ埛鍚嶇О銆佺粍缁囦俊鎭紝鐢ㄦ埛瑙掕壊鐢宠鐢ㄦ埛璇佷功銆�
- 鏀寔鐢宠鍥藉瘑鍜岄潪鍥藉瘑涓ょ璇佷功銆�
- 鍚堢害閮ㄧ讲闇€瑕佸搴旂殑绠$悊鍛樿瘉涔︼紝鎵€浠ラ渶瑕佺敵璇峰搴旂殑绠$悊鍛樼敤鎴�

#### 鏂板缓鍖哄潡閾�
<img loading="lazy" src="../images/ManagementAddChain2.png" style="zoom:50%;" />
<img loading="lazy" src="../images/ManagementAddChain3.png" style="zoom:50%;" />


- 閫夋嫨璇佷功妯″紡
- 閾鹃厤缃枃浠跺弬鏁拌瀹�
  - 姝ゅ鐢ㄤ簬鏂板閾鹃厤缃枃浠讹紝鐩墠鏀寔鑷畾涔夐摼鐨刬d銆佸悕绉般€佸尯鍧楁渶澶у閲忥紝鍑哄潡闂撮殧銆佷氦鏄撹繃鏈熸椂闀匡紝浠ュ強鍏辫瘑閰嶇疆銆�
  - 鐩墠鏀寔閰嶇疆TBFT銆丷AFT銆丼OLO銆丮AXBFT鍏辫瘑銆�
  - 鐢宠閾鹃厤缃枃浠跺墠锛岃鍏堢‘淇濓紝鎵€闇€鐨勭粍缁囧拰鑺傜偣璇佷功宸茬粡鐢宠/瀵煎叆鏈鐞嗗钩鍙般€�
  - 姝ゅ闇€瑕佸嬀閫塂ocker_VM
  - 鏀寔鍗曟満閮ㄧ讲鍜屽鏈洪儴缃诧紝璇锋纭~鍐欐墍瑕佷箣鍚庤閮ㄧ讲鍖哄潡閾捐妭鐐圭殑鏈哄櫒鎵€鍦ㄧ殑ip锛屽苟纭繚绔彛涓嶅啿绐併€�

#### 涓嬭浇閮ㄧ讲閾�
<img loading="lazy" src="../images/ManagementDownloadChain2.png" style="zoom:50%;" />

- 濡傚浘鎵€绀洪渶瑕佸厛涓嬭浇瀹夎Docker_VM鐨勭幆澧冧緷璧栵紝鐒跺悗鍐嶉儴缃插尯鍧楅摼銆�
- 閮ㄧ讲鍖哄潡閾�
  - 涓嬭浇閾鹃厤缃互zip鍖呬负鍑嗭紝zip鍖呭寘鍚搴旂殑閾鹃厤缃枃浠跺拰閮ㄧ讲鑴氭湰
  - 灏嗕笅杞界殑鍖呯Щ鍔ㄧ殑闇€瑕侀儴缃茬殑鏈哄櫒涓婂幓锛堝彲浠ヤ娇鐢╯cp杩涜绉诲姩锛�
  - 鎵ц`unzip`瑙e帇鎴恅release`鍖咃紝杩涘叆`release`鍖呮墽琛宍start.sh`杩涜鍚姩

#### 蹇€熻闃呴摼
<img loading="lazy" src="../images/ManagementSubscribe.png" style="zoom:50%;" />

- 閾鹃儴缃叉垚鍔熶箣鍚庡湪绠$悊鍙拌繘琛屽揩閫熻闃�

#### 閮ㄧ讲/璋冪敤鍚堢害楠岃瘉閾炬槸鍚︽甯�
璁㈤槄鎴愬姛鍚庯紝鍙繘琛岄儴缃�/璋冪敤绀轰緥鍚堢害锛屼互妫€鏌ラ摼鍔熻兘鏄惁姝e父銆傞儴缃插悎绾︾殑浣跨敤鏁欑▼鍙瑙侊細[閮ㄧ讲绀轰緥鍚堢害](./閮ㄧ讲绀轰緥鍚堢害.md)銆�



## 閫氳繃鍛戒护琛屽惎鍔ㄥ惎鐢―ocker铏氭嫙鏈虹殑閾�

### 鐜渚濊禆

**鎿嶄綔绯荤粺**

DockerVM渚濊禆浜巆group v1锛岀洰鍓嶄粎鏀寔鍦↙inux绯荤粺涓嬮儴缃插拰杩愯DockerVM銆�

娉細妫€鏌ョ郴缁焎group鐗堟湰鐨勬柟娉曞涓嬶紝v2鐨勮緭鍑轰负`cgroup2fs`锛寁1鐨勮緭鍑轰负`tmpfs`(`ubuntu22.04`鐗堟湰寮€濮嬮粯璁や负v2)銆�

```shell
stat -fc %T /sys/fs/cgroup/
```

**杞欢渚濊禆**

docker锛�7zip

渚濊禆杞欢涓嬭浇锛�

- docker锛氳鍙傜湅[https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
- 7zip锛氳鍙傜湅[7zip瀹樼綉](https://sparanoid.com/lab/7z/)

鎷夊彇瀹樻柟Docker铏氭嫙鏈洪暅鍍忥細

```shell
# docker go image
docker pull chainmakerofficial/chainmaker-vm-engine:v2.4.0

# docker java image
docker pull chainmakerofficial/chainmaker-vm-engine-java:v2.4.0
```

### 鐢熸垚璇佷功骞跺垵濮嬪寲閰嶇疆

**鍚敤DockerVM**

鍦╟hainmaker涓惎鐢―ocker VM鏈変袱绉嶆柟寮忋€�

**鏂瑰紡涓€:**

 [閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼](../recovery/閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼.md)锛屽湪鎵ц`prepare.sh`銆乣prepare_pk.sh`銆乣prepare_pwk.sh`鏃讹紝`enable docker go vm` 閫夋嫨 YES锛屾垨鑰卄enable docker java vm` 閫夋嫨 YES銆傚彲浠ュ悓鏃跺惎鐢╠ocker go 鍜宒ocker java銆�

```shell
enable docker go vm (YES|NO(default))
```

```shell
enable docker java vm (YES|NO(default))
```

- 杩涘叆chainmaker-go/scripts鐩綍锛屾墽琛宲repare.sh鑴氭湰鐢熸垚鍗曢摼4鑺傜偣闆嗙兢閰嶇疆锛屽瓨浜庤矾寰刢hainmaker-go/build涓�

- prepare_pk.sh鑴氭湰鏀寔鐢熸垚4/7/10/13/16鑺傜偣鍏閽ュ拰閰嶇疆

```shell
# 杩涘叆鑴氭湰鐩綍
$ cd ../scripts
# 鏌ョ湅鑴氭湰甯姪
$ ./prepare.sh -h
Usage:  
    prepare.sh node_cnt(1/4/7/10/13/16) chain_cnt(1-4)
               p2p_port(default:11301) rpc_port(default:12301)
               docker_vm_runtime_port(default:32351) docker_go_engine_port(default:22351)
               docker_java_engine_port(default:23351)
               -c consense-type: 1-TBFT,3-MAXBFT,4-RAFT 
               -l log-level: DEBUG,INFO,WARN,ERROR
               -v docker-vm-enable: true,false
                  --vlog vm go log level: DEBUG,INFO,WARN,ERROR
               -j docker-java-enable: true,false
                  --jlog vm go log level: DEBUG,INFO,WARN,ERROR
               -h show help
    eg1: prepare.sh 4 1
    eg2: prepare.sh 4 1 11301 12301
    eg2: prepare.sh 4 1 11301 12301 32351 22351 23351
    eg2: prepare.sh 4 1 11301 12301 32351 22351 23351 -c 1 -l INFO -v true   -j true  --vlog=INFO --jlog=INFO
    eg2: prepare.sh 4 1 11301 12301 32351 22351 23351 -c 1 -l INFO -v false  -j false --vlog=INFO --jlog=INFO

# 鐢熸垚鍗曢摼4鑺傜偣闆嗙兢鐨勮瘉涔﹀拰閰嶇疆
./prepare.sh 4 1
begin check params...
param P2P_PORT 11301
param RPC_PORT 12301
param DOCKER_VM_RUNTIME_PORT 32351
param DOCKER_GO_ENGINE_PORT 22351
param DOCKER_JAVA_ENGINE_PORT 23351
input consensus type (1-TBFT(default),3-MAXBFT,4-RAFT,6-ABFT): 
param CONSENSUS_TYPE 1
input log level (DEBUG|INFO(default)|WARN|ERROR): 
param LOG_LEVEL INFO
enable vm go (YES|NO(default))YES
input vm go log level (DEBUG|INFO(default)|WARN|ERROR): 
param DOCKER_GO_LOG_LEVEL INFO
param ENABLE_VM_GO true
enable vm java (YES|NO(default))YES
input vm java log level (DEBUG|INFO(default)|WARN|ERROR): 
param DOCKER_JAVA_LOG_LEVEL INFO
param ENABLE_VM_JAVA true
config node total 4
begin generate node1 config...
begin node1 chain1 cert config...
begin node1 trust config...
begin generate node2 config...
begin node2 chain1 cert config...
begin node2 trust config...
begin generate node3 config...
begin node3 chain1 cert config...
begin node3 trust config...
begin generate node4 config...
begin node4 chain1 cert config...
begin node4 trust config...

# 鏌ョ湅鐢熸垚濂界殑鑺傜偣璇佷功鍜岄厤缃�
$ tree -L 3 ../build/
../build/
鈹溾攢鈹€ backup
鈹偮犅� 鈹溾攢鈹€ backup_certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220816164215
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220816193731
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220816193745
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220817195010
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220819164151
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220822204421
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ crypto-config_20220823193308
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ crypto-config_20220823193419
鈹偮犅� 鈹溾攢鈹€ backup_config
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ config_20220823193425
鈹偮犅� 鈹斺攢鈹€ backup_release
鈹偮犅�     鈹溾攢鈹€ release_20220808210208
鈹偮犅�     鈹溾攢鈹€ release_20220809203122
鈹偮犅�     鈹溾攢鈹€ release_20220816193816
鈹偮犅�     鈹溾攢鈹€ release_20220817195117
鈹偮犅�     鈹斺攢鈹€ release_20220819164434
鈹溾攢鈹€ config
鈹偮犅� 鈹溾攢鈹€ node1
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainconfig
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ log.yml
鈹偮犅� 鈹溾攢鈹€ node2
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainconfig
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ log.yml
鈹偮犅� 鈹溾攢鈹€ node3
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ certs
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainconfig
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ chainmaker.yml
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ log.yml
鈹偮犅� 鈹斺攢鈹€ node4
鈹偮犅�     鈹溾攢鈹€ certs
鈹偮犅�     鈹溾攢鈹€ chainconfig
鈹偮犅�     鈹溾攢鈹€ chainmaker.yml
鈹偮犅�     鈹斺攢鈹€ log.yml
鈹溾攢鈹€ crypto-config
鈹偮犅� 鈹溾攢鈹€ wx-org1.chainmaker.org
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
鈹偮犅� 鈹溾攢鈹€ wx-org2.chainmaker.org
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
鈹偮犅� 鈹溾攢鈹€ wx-org3.chainmaker.org
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ ca
鈹偮犅� 鈹偮犅� 鈹溾攢鈹€ node
鈹偮犅� 鈹偮犅� 鈹斺攢鈹€ user
鈹偮犅� 鈹斺攢鈹€ wx-org4.chainmaker.org
鈹偮犅�     鈹溾攢鈹€ ca
鈹偮犅�     鈹溾攢鈹€ node
鈹偮犅�     鈹斺攢鈹€ user
鈹溾攢鈹€ crypto_config.yml
鈹溾攢鈹€ pkcs11_keys.yml
鈹斺攢鈹€ release
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org1.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ data
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org1.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org2.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org2.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org3.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org3.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org4.chainmaker.org
    鈹偮犅� 鈹溾攢鈹€ bin
    鈹偮犅� 鈹溾攢鈹€ config
    鈹偮犅� 鈹溾攢鈹€ lib
    鈹偮犅� 鈹斺攢鈹€ log
    鈹溾攢鈹€ chainmaker-v2.4.0-wx-org4.chainmaker.org-20220819164205-x86_64.tar.gz
    鈹斺攢鈹€ crypto-config-20220819164205.tar.gz
```



**鏂瑰紡浜�**

 淇敼鑺傜偣閰嶇疆鐩綍涓嬬殑`chainmaker.yml`鏂囦欢锛屾牴鎹渶瑕侀厤缃笉鍚岀殑铏氭嫙鏈烘槸鍚﹀惎鐢紙`enable`璁剧疆涓篳true`鎴朻false`锛�:

```yaml
vm:
  go:
    # 鏄惁鍚敤鏂扮増Golang瀹瑰櫒
    enable: true

  java:
    # 鏄惁鍚敤鏂扮増Java瀹瑰櫒
    enable: true
```

### DockerVM閰嶇疆

**閰嶇疆淇℃伅璇存槑**

chainmaker.yml 鏂囦欢鐩稿叧閰嶇疆濡備笅锛�

```yaml
vm:
  common:
    # 涓庤櫄鎷熸満寮曟搸grpc閫氫俊鐨勬渶澶ф秷鎭彂閫佸ぇ灏�, 榛樿100MB
    max_send_msg_size: 100
    # 涓庤櫄鎷熸満寮曟搸grpc閫氫俊鐨勬渶澶ф秷鎭帴鏀跺ぇ灏�, 榛樿100MB
    max_recv_msg_size: 100
    # 涓庤櫄鎷熸満寮曟搸grpc閫氫俊鐨勬渶澶ц繛鎺ヨ秴鏃舵椂闂�, 榛樿10s
    dial_timeout: 10

    # 杩愯鏃舵湇鍔″櫒閰嶇疆 (涓庡悎绾﹀疄渚嬭繘绋嬩氦浜掞紝杩涜淇℃伅浜ゆ崲)
    runtime_server:
      # 绔彛鍙凤紝榛樿涓� 32351
      port: 32351

  go:
    # 鏄惁鍚敤鏂扮増Golang瀹瑰櫒
    enable: true
    # 鏁版嵁鎸傝浇璺緞, 鍖呮嫭鍚堢害銆乻ock鏂囦欢锛坲ds锛�
    data_mount_path: ../data/wx-org1.chainmaker.org/go
    # 鏃ュ織鎸傝浇璺緞
    log_mount_path: ../log/wx-org1.chainmaker.org/go

    # 濡傛灉闇€瑕佽嚜瀹氫箟楂樼骇閰嶇疆锛岃灏唙m.yml鏂囦欢鏀惧叆dockervm_config_path涓紝浼樺厛绾э細chainmaker.yml > vm.yml > 榛樿閰嶇疆
    # dockervm_config_path: /config_path/vm.yml
    # 鏄惁鍦ㄦ帶鍒跺彴鎵撳嵃鏃ュ織
    log_in_console: false
    # docker鍚堢害寮曟搸鐨勬棩蹇楃骇鍒�
    log_level: DEBUG


    # 鍚堢害寮曟搸鏈€澶氬惎鐢ㄧ殑鍘熷鍚堢害杩涚▼鏁帮紝榛樿涓�20锛堣法鍚堢害璋冪敤浼氶澶栨媺璧锋柊鐨勮繘绋嬶級
    max_concurrency: 20

    # 鍚堢害寮曟搸鏈嶅姟鍣ㄩ厤缃� (涓巆hainmaker浜や簰锛岃繘琛屼氦鏄撹姹傘€佸悎绾﹁姹傜瓑浜や簰)
    contract_engine:
      # 鍚堢害寮曟搸鏈嶅姟鍣╥p, 榛樿涓� 127.0.0.1
      host: 127.0.0.1
      # 绔彛鍙凤紝榛樿涓� 22351
      port: 22351
      # 涓庡悎绾﹀紩鎿庢湇鍔″櫒鐨勬渶澶ц繛鎺ユ暟
      max_connection: 5

  java:
    # 鏄惁鍚敤Java瀹瑰櫒
    enable: true
    # 鏁版嵁鎸傝浇璺緞, 鍖呮嫭鍚堢害銆乻ock鏂囦欢锛坲ds锛�
    data_mount_path: ../data/wx-org1.chainmaker.org/java
    # 鏃ュ織鎸傝浇璺緞
    log_mount_path: ../log/wx-org1.chainmaker.org/java

    # 濡傛灉闇€瑕佽嚜瀹氫箟楂樼骇閰嶇疆锛岃灏唙m.yml鏂囦欢鏀惧叆dockervm_config_path涓紝浼樺厛绾э細chainmaker.yml > vm.yml > 榛樿閰嶇疆
    # dockervm_config_path: /config_path/vm.yml
    # 鏄惁鍦ㄦ帶鍒跺彴鎵撳嵃鏃ュ織
    log_in_console: false
    # docker鍚堢害寮曟搸鐨勬棩蹇楃骇鍒�
    log_level: DEBUG


    # 鍚堢害寮曟搸鏈€澶氬惎鐢ㄧ殑鍘熷鍚堢害杩涚▼鏁帮紝榛樿涓�20锛堣法鍚堢害璋冪敤浼氶澶栨媺璧锋柊鐨勮繘绋嬶級
    max_concurrency: 20

    # 鍚堢害寮曟搸鏈嶅姟鍣ㄩ厤缃� (涓巆hainmaker浜や簰锛岃繘琛屼氦鏄撹姹傘€佸悎绾﹁姹傜瓑浜や簰)
    contract_engine:
      # 鍚堢害寮曟搸鏈嶅姟鍣╥p, 榛樿涓� 127.0.0.1
      host: 127.0.0.1
      # 绔彛鍙凤紝榛樿涓� 23351
      port: 23351
      # 涓庡悎绾﹀紩鎿庢湇鍔″櫒鐨勬渶澶ц繛鎺ユ暟
      max_connection: 5
```

**楂樼骇閰嶇疆**

濡傛灉甯屾湜浣跨敤鍚堢害寮曟搸楂樼骇閰嶇疆锛岄渶瑕侀厤缃甡vm:go`涓媊dockervm_config_path`涓厤缃枃浠讹紝閰嶇疆鏂囦欢妯℃澘濡備笅锛�

```yaml
########### RPC ###########
rpc:
  chain_rpc_protocol: 1 # chain rpc protocol, 0 for unix domain socket, 1 for tcp(default)
  chain_host: 127.0.0.1 # chain tcp host
  chain_rpc_port: 22351 # chain rpc port, valid when protocol is tcp
  sandbox_rpc_port: 32351 # sandbox rpc port, valid when protocol is tcp
  max_send_msg_size: 100 # max send msg size(MiB)
  max_recv_msg_size: 100 # max recv msg size(MiB)
  server_min_interval: 60s # server min interval
  connection_timeout: 5s # connection timeout time
  server_keep_alive_time: 60s # idle duration before server ping
  server_keep_alive_timeout: 20s # ping timeout

########### Process ###########
process:
  # max original process num,
  # max_call_contract_process_num = max_original_process_num * max_contract_depth (defined in protocol)
  # max_total_process_num = max_call_contract_process_num + max_original_process_num
  max_original_process_num: 20
  exec_tx_timeout: 8s # process timeout while busy
  waiting_tx_time: 200ms # process timeout while tx completed (busy -> idle)
  release_rate: 30 # percentage of idle processes released periodically in total processes (0-100)
  release_period: 10m # period of idle processes released periodically in total processes

########### Log ###########
log:
  contract_engine:
    level: "info"
    console: true
  sandbox:
    level: "info"
    console: true

########### Pprof ###########
pprof:
  contract_engine:
    enable: false
    port: 21215
  sandbox:
    enable: false
    port: 21522

########### Contract ###########
contract:
  max_file_size: 20480 # contract size(MiB)
```

**鈿狅笍娉ㄦ剰锛�**

鍦ㄥ鍣ㄥ惎鍔ㄨ剼鏈腑锛宍max_concurrency`锛堟渶澶у惎鐢ㄧ殑杩涚▼鏁伴噺锛夐粯璁や负`20`锛堣法鍚堢害璋冪敤浼氶澶栨媺璧锋柊鐨勮繘绋嬶級銆�

濡傛灉鏄湪鐢熶骇鐜涓嬶紝寤鸿鏍规嵁cpu鏍告暟閰嶇疆杩欎笁涓弬鏁般€�

|                 | 8C CPU | 16C CPU | 32C CPU |
| --------------- | ------ | ------- | ------- |
| max_concurrency | 20     | 100     | 1500    |

濡傛灉鏈夎緝澶氳法鍚堢害璋冪敤浜ゆ槗锛岃鏍规嵁璺ㄥ悎绾﹁皟鐢ㄧ殑娣卞害鎸夋瘮渚嬪噺灏慲max_concurrency`鐨勫€硷紝渚嬪32鏍哥郴缁熶笅锛屽鏋滄湁杈冨涓ゅ眰璺ㄥ悎绾﹁皟鐢紝鍒檂max_concurrency`鍊煎缓璁涓篳750锛�1500/2锛塦銆�

濡傛灉浣跨敤鑴氭湰鍚姩锛岃鎸夐渶淇敼鑴氭湰閲岀殑鍙傛暟閰嶇疆銆�

### 缂栬瘧鍜屽畨瑁呭寘鍒朵綔

- 鐢熸垚璇佷功锛坧repare.sh鑴氭湰锛夊悗鎵цbuild_release.sh鑴氭湰锛屽皢缂栬瘧chainmaker-go妯″潡锛屽苟鎵撳寘鐢熸垚瀹夎锛屽瓨浜庤矾寰刢hainmaker-go/build/release涓�

```shell
$ ./build_release.sh
$ tree ../build/release/
../build/release/
鈹溾攢鈹€ chainmaker-v2.4.0-wx-org1.chainmaker.org-20220823193812-x86_64.tar.gz
鈹溾攢鈹€ chainmaker-v2.4.0-wx-org2.chainmaker.org-20220823193812-x86_64.tar.gz
鈹溾攢鈹€ chainmaker-v2.4.0-wx-org3.chainmaker.org-20220823193812-x86_64.tar.gz
鈹溾攢鈹€ chainmaker-v2.4.0-wx-org4.chainmaker.org-20220823193812-x86_64.tar.gz
鈹斺攢鈹€ crypto-config-20220823193812.tar.gz
```



### 鍚屾椂鍚姩閾惧拰DockerVM

**鍚姩**

- 鎵цcluster_quick_start.sh鑴氭湰锛屼細瑙e帇鍚勪釜瀹夎鍖咃紝璋冪敤bin鐩綍涓殑start.sh鑴氭湰锛屽惎鍔╟hainmaker鑺傜偣锛屽苟鎷夎捣鑺傜偣闇€瑕佺殑DockerVM瀹瑰櫒

```shell
$ ./cluster_quick_start.sh normal
```

**鏌ョ湅鑺傜偣鏄惁瀛樺湪**

- 鏌ョ湅杩涚▼

```shell
root      998263       1  1 17:38 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org1.chainmaker.org/chainmaker.yml name-20230828172931
root     1000785       1  1 17:38 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org2.chainmaker.org/chainmaker.yml name-20230828172931
root     1003164       1  1 17:38 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org3.chainmaker.org/chainmaker.yml name-20230828172932
root     1005601       1  1 17:38 pts/0    00:00:00 ./chainmaker start -c ../config/wx-org4.chainmaker.org/chainmaker.yml name-20230828172932
```

- 鏌ョ湅绔彛

```shell
$ netstat -lptn | grep 1230
tcp6       0      0 :::12301                :::*                    LISTEN      2058348/./chainmake
tcp6       0      0 :::12302                :::*                    LISTEN      2059604/./chainmake
tcp6       0      0 :::12303                :::*                    LISTEN      2060801/./chainmake
tcp6       0      0 :::12304                :::*                    LISTEN      2062057/./chainmake
```

- 鏌ョ湅DockerVM瀹瑰櫒

```shell
$ docker ps | grep "chainmakerofficial/chainmaker-vm-engine:v2.4.0"
CONTAINER ID   IMAGE                                                 COMMAND               CREATED          STATUS          PORTS     NAMES
e54dfe966bfb   chainmakerofficial/chainmaker-vm-engine-java:v2.4.0   "/bin/startvm java"   14 seconds ago   Up 14 seconds             VM-JAVA-wx-org4.chainmaker.org-name-20230828172932
cc600c451936   chainmakerofficial/chainmaker-vm-engine:v2.4.0        "/bin/startvm go"     17 seconds ago   Up 17 seconds             VM-GO-wx-org4.chainmaker.org-name-20230828172932
09875f597d28   chainmakerofficial/chainmaker-vm-engine-java:v2.4.0   "/bin/startvm java"   21 seconds ago   Up 20 seconds             VM-JAVA-wx-org3.chainmaker.org-name-20230828172932
eaf720547cdd   chainmakerofficial/chainmaker-vm-engine:v2.4.0        "/bin/startvm go"     24 seconds ago   Up 23 seconds             VM-GO-wx-org3.chainmaker.org-name-20230828172932
a2d164c0cac2   chainmakerofficial/chainmaker-vm-engine-java:v2.4.0   "/bin/startvm java"   27 seconds ago   Up 27 seconds             VM-JAVA-wx-org2.chainmaker.org-name-20230828172931
3739454d774e   chainmakerofficial/chainmaker-vm-engine:v2.4.0        "/bin/startvm go"     30 seconds ago   Up 30 seconds             VM-GO-wx-org2.chainmaker.org-name-20230828172931
a06e195a17d6   chainmakerofficial/chainmaker-vm-engine-java:v2.4.0   "/bin/startvm java"   34 seconds ago   Up 33 seconds             VM-JAVA-wx-org1.chainmaker.org-name-20230828172931
bc5a9e5b40bd   chainmakerofficial/chainmaker-vm-engine:v2.4.0        "/bin/startvm go"     37 seconds ago   Up 36 seconds             VM-GO-wx-org1.chainmaker.org-name-20230828172931
```

- 鏌ョ湅鏃ュ織

```shell
$ cat ../build/release/*/bin/panic.log
$ cat ../build/release/*/log/system.log
$ cat ../build/release/*/log/system.log |grep "ERROR\|put block\|all necessary"
```



### 鐙珛閮ㄧ讲DockerVM铏氭嫙鏈�

**棣栧厛鍘籤./build/release`璺緞涓嬭В鍘嬪悇涓妭鐐硅瘉涔﹀強閰嶇疆鐨刯ar鍖�:**

```shell
tar -zxvf chainmaker-v2.4.0-wx-org4.chainmaker.org-20220824115035-x86_64.tar.gz
```

**鍚姩鑺傜偣1闇€瑕佺殑DockerVM**

- 浣跨敤*docker-vm-standalone-start.sh*鑴氭湰鍚姩Docker Go VM

```shell
$ ./docker-vm-standalone-start.sh
input path to cache contract files(must be absolute path, default:'./docker-go'): /home/data/wx-org1.chainmaker.org/go
contracts path does not exist, create it or not(y|n): y
input log path(must be absolute path, default:'./log'): /home/log/wx-org1.chainmaker.org/go
log path does not exist, create it or not(y|n): y
input log level(DEBUG|INFO(default)|WARN|ERROR): DEBUG
input expose port(default 22351): 22351
input runtime port(default 32351): 32351
input container name(default 'chainmaker-docker-vm'): VM-GO-wx-org1.chainmaker.org
# 涓嶄娇鐢ㄩ厤缃枃浠跺惎鍔―ockerVM锛屽拷鐣ヨ椤�
input vm config file path(use default config(default)):
docker-vm config is nil, use default config
start docker vm container
```

- 浣跨敤*docker-vm-standalone-start.sh*鑴氭湰鍚姩Docker Java VM

```shell
$ ./docker-vm-standalone-start.sh java
input path to cache contract files(must be absolute path, default:'./docker-go'): /home/data/wx-org1.chainmaker.org/java
contracts path does not exist, create it or not(y|n): y
input log path(must be absolute path, default:'./log'): /home/log/wx-org1.chainmaker.org/java
log path does not exist, create it or not(y|n): y
input log level(DEBUG|INFO(default)|WARN|ERROR): DEBUG
input expose port(default 22351): 22351
input runtime port(default 32351): 32351
input container name(default 'chainmaker-docker-vm'): VM-JAVA-wx-org1.chainmaker.org
# 涓嶄娇鐢ㄩ厤缃枃浠跺惎鍔―ockerVM锛屽拷鐣ヨ椤�
input vm config file path(use default config(default)):
docker-vm config is nil, use default config
start docker vm container
```

- 浣跨敤Docker鍛戒护鍚姩

鍚姩Docker Go 铏氭嫙鏈�
```shell
$ docker run -itd \
--net=host \
-v "/home/data/wx-org1.chainmaker.org/go":/mount \
-v "/home/log/wx-org1.chainmaker.org/go":/log \
-e CHAIN_RPC_PROTOCOL="1" \
-e CHAIN_RPC_PORT="22351" \
-e SANDBOX_RPC_PORT="32351" \
-e MAX_SEND_MSG_SIZE="100" \
-e MAX_RECV_MSG_SIZE="100" \
-e MAX_CONN_TIMEOUT="10" \
-e MAX_ORIGINAL_PROCESS_NUM="20" \
-e DOCKERVM_CONTRACT_ENGINE_LOG_LEVEL="DEBUG" \
-e DOCKERVM_SANDBOX_LOG_LEVEL="DEBUG" \
-e DOCKERVM_LOG_IN_CONSOLE="false" \
--name VM-GO-wx-org1.chainmaker.org \
--privileged chainmakerofficial/chainmaker-vm-engine:v3.0.1 \
> /dev/null
```


鍚姩Docker Java 铏氭嫙鏈�
```shell
$ docker run -itd \
--net=host \
-v "/home/data/wx-org1.chainmaker.org/go":/mount \
-v "/home/log/wx-org1.chainmaker.org/go":/log \
-e CHAIN_RPC_PROTOCOL="1" \
-e CHAIN_RPC_PORT="22351" \
-e SANDBOX_RPC_PORT="32351" \
-e MAX_SEND_MSG_SIZE="100" \
-e MAX_RECV_MSG_SIZE="100" \
-e MAX_CONN_TIMEOUT="10" \
-e MAX_ORIGINAL_PROCESS_NUM="20" \
-e DOCKERVM_CONTRACT_ENGINE_LOG_LEVEL="DEBUG" \
-e DOCKERVM_SANDBOX_LOG_LEVEL="DEBUG" \
-e DOCKERVM_LOG_IN_CONSOLE="false" \
--name VM-JAVA-wx-org1.chainmaker.org \
--privileged chainmakerofficial/chainmaker-vm-engine-java:v2.4.0 \
> /dev/null
```

**鐒跺悗鍚姩鑺傜偣1**

```shell
$ ./start.sh -f alone
```

**鏌ョ湅鑺傜偣鍜屽鍣ㄦ槸鍚﹀凡缁忓缓绔嬮摼鎺�**

```shell
$ cat /home/log/wx-org1.chainmaker.org/go/go.log |grep "Chain RPC Service"
```

鎸夌収涓婅堪姝ラ渚濇鍚姩鍓╀綑鑺傜偣銆�

### 浣跨敤楂樼骇閰嶇疆鐙珛閮ㄧ讲DockerVM

**楂樼骇閰嶇疆**

濡傛灉甯屾湜浣跨敤鍚堢害寮曟搸楂樼骇閰嶇疆锛岄渶瑕侀厤缃甡vm:go`涓媊dockervm_config_path`楂樼骇閰嶇疆鏂囦欢璺緞锛岃繖閲屾垜浠妸鑺傜偣1鐨凞ockerVM楂樼骇閰嶇疆鏂囦欢*vm.yml*鏀剧疆鍦╜/home/config_path/wx-org1.chainmaker.org`锛屽湪*chainmaker.yml*涓搴旂殑閰嶇疆濡備笅锛�

```yaml
# Contract Virtual Machine(VM) configs
vm:
  # Golang runtime in docker container
  go:
    ...
    # If use a customized VM configuration file, supplement it; else, do not configure
    # Priority: chainmaker.yml > vm.yml > default settings
    dockervm_config_path: /home/config_path/wx-org1.chainmaker.org/vm.yml
   	...
```

閰嶇疆鏂囦欢妯℃澘濡備笅锛�

```yaml
########### RPC ###########
rpc:
  chain_rpc_protocol: 1 # chain rpc protocol, 0 for unix domain socket, 1 for tcp(default)
  chain_host: 127.0.0.1 # chain tcp host
  chain_rpc_port: 22351 # chain rpc port, valid when protocol is tcp
  sandbox_rpc_port: 32351 # sandbox rpc port, valid when protocol is tcp
  max_send_msg_size: 100 # max send msg size(MiB)
  max_recv_msg_size: 100 # max recv msg size(MiB)
  server_min_interval: 60s # server min interval
  connection_timeout: 5s # connection timeout time
  server_keep_alive_time: 60s # idle duration before server ping
  server_keep_alive_timeout: 20s # ping timeout

########### Process ###########
process:
  # max original process num,
  # max_call_contract_process_num = max_original_process_num * max_contract_depth (defined in protocol)
  # max_total_process_num = max_call_contract_process_num + max_original_process_num
  max_original_process_num: 20
  exec_tx_timeout: 8s # process timeout while busy
  waiting_tx_time: 200ms # process timeout while tx completed (busy -> idle)
  release_rate: 30 # percentage of idle processes released periodically in total processes (0-100)
  release_period: 10m # period of idle processes released periodically in total processes

########### Log ###########
log:
  contract_engine:
    level: "info"
    console: true
  sandbox:
    level: "info"
    console: true

########### Pprof ###########
pprof:
  contract_engine:
    enable: false
    port: 21215
  sandbox:
    enable: false
    port: 21522

########### Contract ###########
contract:
  max_file_size: 20480 # contract size(MiB)
```

**浣跨敤楂樼骇閰嶇疆鍚姩鑺傜偣闇€瑕佺殑DockerVM**

- 浣跨敤*docker-vm-standalone-start.sh*鑴氭湰鍚姩DockerVM

```shell
$ ./docker-vm-standalone-start.sh
input path to cache contract files(must be absolute path, default:'./docker-go'): /home/data/wx-org1.chainmaker.org/go
contracts path does not exist, create it or not(y|n): y
input log path(must be absolute path, default:'./log'): /home/log/wx-org1.chainmaker.org/go
log path does not exist, create it or not(y|n): y
## 浣跨敤閰嶇疆鏂囦欢锛屽拷鐣ヨ椤�
input log level(DEBUG|INFO(default)|WARN|ERROR):
## 浣跨敤閰嶇疆鏂囦欢锛屽拷鐣ヨ椤�
input expose port(default 22351):
## 浣跨敤閰嶇疆鏂囦欢锛屽拷鐣ヨ椤�
input runtime port(default 32351):
input container name(default 'chainmaker-docker-vm'): VM-GO-wx-org1.chainmaker.org
input vm config file path(use default config(default)): /home/config_path/wx-org1.chainmaker.org/vm.yml
start docker vm container
```

- 浣跨敤Docker鍛戒护鍚姩DockerVM

```shell
$ docker run -itd \
--net=host \
-v "/home/data/wx-org1.chainmaker.org/go":/mount \
-v "/home/log/wx-org1.chainmaker.org/go":/log \
--name VM-GO-wx-org1.chainmaker.org \
--privileged chainmakerofficial/chainmaker-vm-engine:v2.4.0 \
> /dev/null
```

**鍚姩鑺傜偣**

```shell
$ ./start.sh -f alone
```

**鏌ョ湅鑺傜偣鏄惁鍜孌ockerVM宸茬粡寤虹珛杩炴帴**

```shell
$ cat /home/log/wx-org1.chainmaker.org/go/go.log |grep "Chain RPC Service"
```

鎸夌収涓婅堪姝ラ渚濇鍚姩鍓╀綑鑺傜偣銆�

### 鏈湴閮ㄧ讲鐨勫仠姝�

濡傛灉鏄€氳繃`./cluster_quick_start.sh`鍚屾椂鍚姩鐨勮妭鐐瑰拰铏氭嫙鏈猴紝鍙互閫氳繃瀵瑰簲鐨剆top鑴氭湰鍚屾椂鍋滄閾惧拰DockerVM瀹瑰櫒锛�

```shell
$ ./cluster_quick_stop.sh
```

濡傛灉鍚屾椂闇€瑕佹竻闄ゆ墍鏈夐摼鏁版嵁鍙互浣跨敤锛�

```shell
$ ./cluster_quick_stop.sh clean
```
鐢变簬DockerVM鍐呬娇鐢ㄥ鍣ㄥ唴鐨剅oot鐢ㄦ埛鍚姩铏氭嫙鏈烘湇鍔★紝鍥犳鏃ュ織鍜岀紦瀛樻枃浠朵篃灞炰簬root鐢ㄦ埛锛坲id=0锛夈€傚鏋滀互闈瀝oot鐢ㄦ埛鍚姩鐨勭▼搴忥紝娓呴櫎鏁版嵁鏃跺彲鑳戒細鎶ラ敊鎻愮ず缂哄皯鏂囦欢璁块棶鐨勬潈闄愶紝闇€瑕佷互root鏉冮檺鍒犻櫎鏁版嵁锛屾垨鑰呬娇鐢╗userns-remap](https://docs.docker.com/engine/security/userns-remap/)鐨勫姛鑳藉皢瀹瑰櫒閲岀敤鎴锋槧灏勬垚鏅€氱敤鎴枫€�


### 鐙珛閮ㄧ讲鐨勫仠姝�

**棣栧厛鍏抽棴閾捐妭鐐�**

```shell
$ ./stop.sh alone
```

**鐒跺悗鍏抽棴璇ヨ妭鐐瑰搴旂殑铏氭嫙鏈�**

```shell
$ docker stop VM-GO-wx-org1.chainmaker.org
$ docker stop VM-JAVA-wx-org1.chainmaker.org
```


## 浣跨敤docker閮ㄧ讲鏀寔docker-vm鐨勯摼

鈥滈暱瀹夐摼路ChainMaker鈥濇敮鎸丏ocker-go鍚堢害寮€鍙戯紝Docker-go鍚堢害杩愯鍦ㄧ嫭绔婦ocker VM瀹瑰櫒涓紝鏈枃灏嗕粙缁嶉暱瀹夐摼浣跨敤docker鏂瑰紡閮ㄧ讲鏃讹紝涓嶥ocker-vm閫氫俊鐨勫嚑绉嶉儴缃叉柟寮忋€�

###  浣跨敤docker鏂瑰紡閮ㄧ讲ChainMaker:

```sh
cd chainmaker-go
# 娓呯┖鏃х殑鏋勫缓鏁版嵁
rm -rf build
make docker-build
docker images
```

### 鍑嗗閾鹃渶瑕佺殑閰嶇疆鏂囦欢 

鍙傝€� [鍦ㄥ伐浣滅洰褰曚笅 浣跨敤鑴氭湰鎼缓](../recovery/閫氳繃鍛戒护琛屽伐鍏峰惎鍔ㄩ摼.html#runUseScripts)锛屼娇鐢ㄨ剼鏈敓鎴恉ocker闇€瑕佺殑鑺傜偣閰嶇疆鏂囦欢

```sh
cd chainmaker-go/scripts
./prepare_pk.sh 4 1
./build_release.sh
./cluster_quick_start.sh
./cluster_quick_stop.sh
```

### 澶嶅埗閰嶇疆鏂囦欢鍒癱hainmaker docker鑳借鍙栫殑浣嶇疆

docker鍚姩鏃讹紝榛樿鍔犺浇濡備笅璺緞鐨勯厤缃細chainmaker-go/scripts/docker/config/four-nodes

```sh
cd chainmaker-go/scripts/docker/config/four-nodes
cp -r ../../../../build/release/chainmaker-v2.2.1-wx-org1.chainmaker.org/config/wx-org1.chainmaker.org ./
cp -r ../../../../build/release/chainmaker-v2.2.1-wx-org2.chainmaker.org/config/wx-org2.chainmaker.org ./
cp -r ../../../../build/release/chainmaker-v2.2.1-wx-org3.chainmaker.org/config/wx-org3.chainmaker.org ./
cp -r ../../../../build/release/chainmaker-v2.2.1-wx-org4.chainmaker.org/config/wx-org4.chainmaker.org ./
```

### 淇敼鑺傜偣ip鍦板潃锛�

- 鍦烘櫙涓€锛氫竴鍙癶ost鍚姩4涓猚hainmaker docker node
  闇€瑕佸皢閰嶇疆鏂囦欢涓殑ip鎹㈡垚docker瀹瑰櫒鐨刬p
  -  鍒嗗埆鎵撳紑鍥涗釜鑺傜偣鐨刢hainmaker鏂囦欢:
  ```sh
  # 鏌ョ湅瀹瑰櫒ip ipv4_address: 
  chainmaker-go/scripts/docker] vim four-nodes.docker-compose.yml
  # 淇敼chainmaker.yml鐨勯厤缃�
  chainmaker-go/scripts/docker/config/four-nodes/wx-org1.chainmaker.org] vim chainmaker.yml
  ```
  - 鎵惧埌濡俢hainmaker.yml鐨勫涓嬩綅缃�
  ```yaml
  seeds:
    - "/ip4/127.0.0.1/tcp/11301/p2p/XXX"
    - "/ip4/127.0.0.1/tcp/11302/p2p/XXX"
    - "/ip4/127.0.0.1/tcp/11303/p2p/XXX"
    - "/ip4/127.0.0.1/tcp/11304/p2p/XXX"
  ```
    - 涓ょ淇敼鏂瑰紡浠婚€夊叾涓€

    绗竴绉嶏細浣跨敤four-nodes.docker-compose.yml涓厤缃殑瀹瑰櫒ip

     ```yaml
     seeds:
         - "/ip4/172.48.1.11/tcp/11301/p2p/XXX"
         - "/ip4/172.48.1.12/tcp/11302/p2p/XXX"
         - "/ip4/172.48.1.13/tcp/11303/p2p/XXX"
         - "/ip4/172.48.1.14/tcp/11304/p2p/XXX"
     ```

     绗簩绉嶏細浣跨敤four-nodes.docker-compose.yml涓厤缃殑瀹瑰櫒鍚�

     ```yaml
     seeds:
         - "/dns/cm-node1/tcp/11301/p2p/XXX"
         - "/dns/cm-node2/tcp/11302/p2p/XXX"
         - "/dns/cm-node3/tcp/11303/p2p/XXX"
         - "/dns/cm-node4/tcp/11304/p2p/XXX"
     ```

- 鍦烘櫙浜岋細鍥涘彴host鍚姩4涓猚hainmaker docker node

    鍙傝€冨涓婁慨鏀规柟寮忥紝ip淇敼涓哄洓鍙癶ost鐨刬p

### 淇敼docker-vm鐩稿叧閰嶇疆

鈥滈暱瀹夐摼路ChainMaker鈥漋2.2.1涔嬪悗锛屽湪鑺傜偣閰嶇疆鏂囦欢chainmaker.yml涓叧浜巇ocker鐨勪袱绉嶈繛鎺ユ柟寮忓搴旂殑閰嶇疆涓猴細

绗竴绉嶏細鏈湴鐨剆ocket鏂囦欢

```
uds_open: true
```

绗簩绉嶏細tcp , **褰揷hainmaker浣跨敤docker鏂瑰紡閮ㄧ讲鏃讹紝鎺ㄨ崘浣跨敤杩欑閰嶇疆**

```
uds_open: false
```

- 鍦烘櫙涓€锛歝hainmaker浠ャ€恉ocker銆戞柟寮忛儴缃诧紝docker-vm涓巆hainmaker-vm閮ㄧ讲鍦ㄣ€愪笉鍚岀殑銆慼ost :

  鍋囪锛欰(192.168.0.9)鏈哄櫒涓婂惎鍔ㄤ簡chainmaker 鐨刣ocker瀹瑰櫒, B(192.168.0.78)鏈哄櫒涓婂惎鍔ㄤ簡瀵瑰簲鐨刣ocker-vm

  ```sh
    uds_open: false
    docker_vm_host: 192.168.0.78
    docker_vm_port: 22351
  ```

- 鍦烘櫙浜岋細chainmaker浠ャ€恉ocker銆戞柟寮忛儴缃诧紝docker-vm涓巆hainmaker-vm閮ㄧ讲鍦ㄣ€愬悓涓€鍙般€慼ost:

    鍋囪锛欰鏈哄櫒涓婂惎鍔ㄤ簡chainmaker鐨刣ocker瀹瑰櫒锛屽悓鏃跺惎鍔ㄥ搴旂殑docker-vm
          鐢变簬docker-vm鍜宑hainmaker鍦ㄥ悓涓€鍙癶ost涓嬶紝闇€瑕佷繚璇佷袱涓猟ocker鐜鍦ㄤ娇鐢ㄥ悓涓€涓綉妗ョ殑鎯呭喌涓媔p鍦ㄥ悓涓€缃戞锛屽嵆澶勫湪鍚屼竴灞€鍩熺綉鍐�,渚嬪浣跨敤濡備笅鍛戒护鍚姩docker-vm

  ```sh
  docker run -d -p22351:22359 --network docker_localnet --ip 172.48.1.21 --privileged chainmakerofficial/chainmaker-vm-docker-go:v2.2.1
  ```

  閰嶇疆鏂囦欢淇敼鏃讹紝娉ㄦ剰绔彛鍙蜂负-p22351:22359涓殑鍚庤€咃紝 骞朵笖ip 涓轰笂闈㈡寚瀹氱殑ip

  ```sh
  uds_open: false
    docker_vm_host: 172.48.1.21
    docker_vm_port: 22359
  ```

- 鍦烘櫙涓夛細chainmaker浠ャ€愯繘绋嬫柟寮忋€戦儴缃诧紝docker-vm涓巆hainmaker閮ㄧ讲鍦ㄣ€愪笉鍚岀殑銆慼ost:

  ```shell
  uds_open: false
    docker_vm_host: 192.168.0.78
    docker_vm_port: 22351
  ```

- 鍦烘櫙鍥涳細chainmaker浠ヨ繘绋嬫柟寮忛儴缃诧紝 docker-vm涓巆hainmaker閮ㄧ讲鍦ㄣ€愬悓涓€鍙般€慼ost:

  ```sh
  uds_open: false
    docker_vm_host: 127.0.0.1
    docker_vm_port: 22351
  ```


## 鍚堢害鐨勫畨瑁呬笌璋冪敤

鍚堢害鐨勫畨瑁呬笌璋冪敤璇峰弬鑰冿細[浣跨敤Golang杩涜鏅鸿兘鍚堢害寮€鍙慮(./浣跨敤Golang杩涜鏅鸿兘鍚堢害寮€鍙�.md)
鍚堢害鐨勫畨瑁呬笌璋冪敤璇峰弬鑰冿細[浣跨敤Java杩涜鏅鸿兘鍚堢害寮€鍙慮(./浣跨敤Java杩涜鏅鸿兘鍚堢害寮€鍙�.md)