--- services: geth: container_name: '{{ geth_cont_name }}' image: '{{ geth_cont_image }}' user: root restart: 'always' stop_grace_period: '{{ geth_cont_stop_grace_period }}' deploy: resources: limits: memory: '{{ geth_cont_mem_limit }}m' ports: - '{{ geth_port }}:{{ geth_port }}/tcp' - '{{ geth_port }}:{{ geth_port }}/udp' {% if geth_metrics_enabled %} - '{{ geth_metrics_port }}:{{ geth_metrics_port }}/tcp' {% endif %} {% if geth_websocket_enabled %} - '{{ geth_websocket_addr }}:{{ geth_websocket_port }}:{{ geth_websocket_port }}/tcp' {% endif %} {% if geth_rpc_enabled %} - '{{ geth_rpc_addr }}:{{ geth_rpc_port }}:{{ geth_rpc_port }}/tcp' {% endif %} {% if geth_authrpc_enabled %} - '{{ geth_authrpc_addr }}:{{ geth_authrpc_port }}:{{ geth_authrpc_port }}/tcp' {% endif %} labels: # These are just for documentation org.ethereum.geth.network_name: '{{ geth_network_name }}' volumes: - '{{ geth_cont_vol }}/keys:/keys:rw' - '{{ geth_cont_vol }}/data:/data:rw' command: | {% if geth_network_id is defined %} --networkid={{ geth_network_id }} {% elif geth_network_name != "mainnet" %} --{{ geth_network_name }} {% endif %} {% if not geth_discovery_enabled %} --nodiscover {% endif %} {% if geth_v5disc_enabled %} --v5disc {% endif %} --syncmode={{ geth_sync_mode }} {% if geth_sync_mode != 'light' %} --light.serve={{ geth_light_serv }} {% endif %} {% if geth_miner_enabled %} --mine --miner.etherbase="{{ geth_miner_account | mandatory }}" {% endif %} {% if geth_whisper_enabled %} --shh --shh.pow={{ geth_whisper_pow }} {% endif %} {% if geth_metrics_enabled %} --metrics --metrics.addr=0.0.0.0 --metrics.port={{ geth_metrics_port }} {% endif %} {% if geth_cache_size %} --cache={{ geth_cache_size }} {% endif %} {% if geth_rpc_enabled %} --http --http.addr=0.0.0.0 --http.port={{ geth_rpc_port }} --http.vhosts={{ geth_rpc_vhosts | sort | join(",") }} --http.api={{ geth_rcp_api }} --ipcpath=/data/geth.ipc {% endif %} {% if geth_websocket_enabled %} --ws --ws.addr=0.0.0.0 --ws.port={{ geth_websocket_port }} --ws.api={{ geth_websocket_api }} --ws.origins={{ geth_websocket_origins | sort | join(",") }} {% endif %} {% if geth_authrpc_enabled %} --authrpc.addr=0.0.0.0 --authrpc.port={{ geth_authrpc_port }} --authrpc.vhosts={{ geth_authrpc_vhosts | sort | join(",") }} --authrpc.jwtsecret=/keys/jwtsecret {% endif %} {% if (geth_bootnodes|length) > 0 %} --bootnodes="{{ geth_bootnodes | sort | join(',') }}" {% endif %} --verbosity={{ geth_log_level_id }} --maxpeers={{ geth_max_peers }} --maxpendpeers="{{ geth_max_pend_peers }}" --port={{ geth_port }} --nat=extip:{{ geth_public_addr }} --unlock={{ geth_account_addr }} --allow-insecure-unlock --datadir=/data --password=/keys/account.pass --keystore=/keys {% for extra_flag in geth_extra_flags %} {{ extra_flag }} {% endfor %}