anchor.diff:      exposed_ports := #{service_label() => pos_integer()},
       local_ports := #{service_label() => pos_integer()},
       sockets := [gen_tcp:socket()], % Reserved socket to prevent port clash
  +    container_id := term(),
  +    config_path := term(),      % Host path of user config
  +    config := term(),           % Content of user config
       % Tuple of host/guest paths where the node logs are
       log_path := {binary(), binary()}
   }.
  
positive.code:         image => Image,
          ulimits => AllUlimits,
          command => Command,
          env => #{"AETERNITY_CONFIG" => ?AETERNITY_CONFIG_FILE,
                   "ERL_CRASH_DUMP" => format("~s/erl_crash.dump", [?EPOCH_LOG_FOLDER])},
          labels => #{epoch_system_test => <<"true">>},
          volumes => [
              {rw, KeysDir, ?EPOCH_KEYS_FOLDER},
              {ro, ConfigFilePath, ?AETERNITY_CONFIG_FILE},
              {rw, LogPath, ?EPOCH_LOG_FOLDER}] ++
              [ {ro, Genesis, ?EPOCH_GENESIS_FILE} || Genesis =/= undefined ] ++
              [ {rw, element(1, DbPath), element(2, DbPath)} || DbPath =/= undefined ],
  
negative.code:         mining => maps:merge(#{autostart => true}, maps:get(mining, Spec, #{}))
      },
      Context = #{aeternity_config => RootVars},
      {ok, ConfigString} = write_template(TemplateFile, ConfigFileHostPath, Context),
      Command =
          case MineRate of
              default -> [];
  