-
Notifications
You must be signed in to change notification settings - Fork 275
chore: add Docker Usage Instructions to README.md #1424
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 3 commits
eadcde3
ec42aa7
d4077ea
717d416
1e9ba8e
a728abf
6d33427
835a9da
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -98,3 +98,84 @@ There are two options when using the Avalanche-CLI: | |||||
|
||||||
1. Use an official Subnet-EVM release: https://docs.avax.network/subnets/build-first-subnet | ||||||
2. Build and deploy a locally built (and optionally modified) version of Subnet-EVM: https://docs.avax.network/subnets/create-custom-subnet | ||||||
|
||||||
## Run in Docker | ||||||
|
||||||
The `subnet-evm` Docker image comes with AvalancheGo pre-installed, making it easy to run a node. You can find the latest image tags on [Docker Hub](https://hub.docker.com/r/avaplatform/subnet-evm/tags). | ||||||
|
||||||
### Configuration | ||||||
|
||||||
You can configure the `subnet-evm` Docker container using both environment variables and standard AvalancheGo config files. | ||||||
|
||||||
- **Environment Variables**: Use uppercase variables prefixed with `AVAGO_`. For example, `AVAGO_NETWORK_ID` corresponds to the `--network-id` flag in AvalancheGo. | ||||||
- **Config Files**: Configure as you would with the regular AvalancheGo binary using config files. Ensure `HOME` is set to `/home/avalanche` and mount the config directory with `-v ~/.avalanchego:/home/avalanche/.avalanchego`. | ||||||
containerman17 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
||||||
### Data Persistence | ||||||
|
||||||
To persist data across container restarts, you need to mount the `.avalanchego` directory. | ||||||
containerman17 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
||||||
- **Create Directory**: Run `mkdir -p ~/.avalanchego/staking` beforehand to create the necessary directories and avoid file system access issues. | ||||||
containerman17 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
- **Set Permissions**: Run the container with `--user $(id -u):$(id -g)` to ensure proper access rights. | ||||||
containerman17 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
- **Set Home and Mount**: Set `HOME` to `/home/avalanche` and mount the data directory with `-v ~/.avalanchego:/home/avalanche/.avalanchego`. | ||||||
containerman17 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
containerman17 marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
|
||||||
### Updating | ||||||
|
||||||
Run `docker stop avago; docker rm avago;` then start a new container with the latest version tag in your `docker run` command. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit (or maybe
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would keep There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I agree to remove the trailing |
||||||
|
||||||
### Networking | ||||||
|
||||||
Using `--network host` is recommended to avoid any issues. | ||||||
|
||||||
If you know what you are doing, you will need port `AVAGO_STAKING_PORT` (default `9651`) open for the validator to connect to the subnet. For the RPC server, open `AVAGO_HTTP_PORT` (default `9650`). Do not attempt to remap `AVAGO_STAKING_PORT` using the Docker `-p` flag (e.g., `-p 9651:1234`); it will not work. Instead, set `AVAGO_STAKING_PORT=1234` and then use `-p 1234:1234`. | ||||||
qdm12 marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
### Example Configs | ||||||
|
||||||
#### Fuji Subnet Validator | ||||||
|
||||||
```bash | ||||||
mkdir -p ~/.avalanchego/staking; docker run -it -d \ | ||||||
--name avago \ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
--network host \ | ||||||
-v ~/.avalanchego:/home/avalanche/.avalanchego \ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would rather have it as
Suggested change
to make it explicit it can be chosen. Plus |
||||||
-e AVAGO_NETWORK_ID=fuji \ | ||||||
-e AVAGO_PARTIAL_SYNC_PRIMARY_NETWORK=true \ | ||||||
-e AVAGO_TRACK_SUBNETS=REPLACE_THIS_WITH_YOUR_SUBNET_ID \ | ||||||
-e AVAGO_PUBLIC_IP_RESOLUTION_SERVICE=ifconfigme \ | ||||||
-e AVAGO_PLUGIN_DIR=/avalanchego/build/plugins/ \ | ||||||
-e HOME=/home/avalanche \ | ||||||
--user $(id -u):$(id -g) \ | ||||||
avaplatform/subnet-evm:v0.7.1 | ||||||
``` | ||||||
|
||||||
- `AVAGO_PARTIAL_SYNC_PRIMARY_NETWORK`: Ensures you don't sync the X and C-Chains. | ||||||
- `AVAGO_PLUGIN_DIR`: Sets the directory for the `subnet-evm` plugin. | ||||||
- `AVAGO_TRACK_SUBNETS`: Sets the subnet ID to track. It will track all chains in the subnet. | ||||||
- `AVAGO_NETWORK_ID=fuji`: Sets the network ID to Fuji. Remove to sync Mainnet. | ||||||
- `AVAGO_PUBLIC_IP_RESOLUTION_SERVICE=ifconfigme`: Required for AWS EC2 instances to be accessed from outside AWS. | ||||||
|
||||||
#### Fuji Subnet RPC | ||||||
|
||||||
```bash | ||||||
mkdir -p ~/.avalanchego_rpc/staking; docker run -it -d \ | ||||||
--name rpc \ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. A more explicit name would be nice, for example
Suggested change
|
||||||
--network host \ | ||||||
-v ~/.avalanchego_rpc/:/home/avalanche/.avalanchego \ | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It would be nicer/clearer to just make it explicit the user should pick a path of their choosing
Suggested change
|
||||||
-e AVAGO_NETWORK_ID=fuji \ | ||||||
-e AVAGO_PARTIAL_SYNC_PRIMARY_NETWORK=true \ | ||||||
-e AVAGO_TRACK_SUBNETS=REPLACE_THIS_WITH_YOUR_SUBNET_ID \ | ||||||
-e AVAGO_HTTP_PORT=8080 \ | ||||||
-e AVAGO_STAKING_PORT=9653 \ | ||||||
-e AVAGO_HTTP_ALLOWED_HOSTS="*" \ | ||||||
-e AVAGO_HTTP_HOST=0.0.0.0 \ | ||||||
-e AVAGO_PUBLIC_IP_RESOLUTION_SERVICE=ifconfigme \ | ||||||
-e AVAGO_PLUGIN_DIR=/avalanchego/build/plugins/ \ | ||||||
-e HOME=/home/avalanche \ | ||||||
--user $(id -u):$(id -g) \ | ||||||
avaplatform/subnet-evm:v0.7.1 | ||||||
``` | ||||||
|
||||||
- `AVAGO_STAKING_PORT` is set to `9653` in case you want to run this on the same machine as the validator. | ||||||
- `AVAGO_HTTP_PORT` is set to `8080` instead of `9650` to avoid conflicts with the validator. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would leave |
||||||
- `AVAGO_HTTP_ALLOWED_HOSTS` and `AVAGO_HTTP_HOST` are required to allow the RPC server to be accessed from outside. You'll need to secure it with HTTPS; Caddy is recommended. | ||||||
|
||||||
RPC example uses another folder `~/.avalanchego_rpc` to avoid conflicts with the validator if you want to run both on the same machine. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. curious is it common / recommended to run both on the same machine? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don’t see why not. It’s a trusted binary, so Docker-level isolation should be enough, as long as you have sufficient resources. Subnet-EVM without X and C chains doesn’t require much. Would I run it on the same machine for DFK? Probably not. But for 95% of other networks, especially on Fuji, I don’t see an issue. Actually, that raises another question—why is it not recommended to run the same node as both a validator and a public RPC node? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's not recommended as the validator could be targeted with many API requests when it is its turn to propose a block, or otherwise targeted so it can miss participating in necessary consensus queries. |
Uh oh!
There was an error while loading. Please reload this page.