---
# System prepended metadata

title: redspot docker

---

# redspot docker

在 redspotv0.4 中，我们添加了使用 docker 编译合约支持。这将能保证在不同平台下编译生成的 wasm 都是一致的。

redspot 将使用 [redspot/contract](https://github.com/patractlabs/docker-images/tree/master/contract) 这个 docker image 进行编译和运行测试网。它是在 paritytech 提供的 [contract docker image](https://github.com/paritytech/scripts/blob/master/dockerfiles/contracts-ci-linux/Dockerfile) 的基础上进行修改的。

目前只支持 ink 合约 docker 编译，配置如下：
```javascript=
...

export default {
  ...
  contract: {
    ink: {
      toolchain: "nightly",
      docker: true,
      sources: ["contracts/**/*"],
    },
  },
  ...
  docker: {
    sudo: false,
  },
  ...
};
```

在运行编译命令之前，请确保本机已安装 docker。运行命令 

```
$ npx redspot compile
```
> ⚠️注意
> 当使用docker编译时，可能受网络环境影响（比如中国大陆需要vpn代理），会导致编译时间过长，
> 如果中途使用 ctrl+c 退出当前编译命令，docker容器并不会自动停止删除。


现在会默认使用 docker 编译。如果想更改默认行为，请添加 `--docker false` 参数：
```
$ npx redspot compile --docker false
```

注意如果遇到权限错误，请将 `redspot.config` 文件中的 `docker.sudo` 改为 true。这样将会使用 sudo 运行 docker。

同样的，也可以使用 docker 运行一个测试网。当前内置了 canvas 测试网，在未来我们会内置更多的测试网以供用户选择。

目前运行测试网的命令是：

```
$ npx redspot testnet
```

实际上，它的作用是仅仅只是运行命令:
```
$ docker run -p 9944:9944 --rm redspot/contract /bin/bash -c "canvas --tmp --dev --ws-port=9944 --ws-external"  
```

如果想要修改默认的运行命令，可以添加 command 参数:

```
$ npx redspot testnet --command 'docker run -p 9945:9944 --rm redspot/contract /bin/bash -c "canvas --tmp --dev --ws-port=9944 --ws-external"'
```

我们会推荐和引导用户优先使用 docker， 因为这样可以专注合约的编写，免去很多环境配置和启动节点的麻烦。