Skip to content

Dockhand¶

Description / nameInput element
Your domain name

Overview¶

Dockhand is a modern, efficient Docker management application providing real-time container management, Compose stack orchestration, and multi-environment support.


Deployment¶

sb install sandbox-dockhand
sb install sandbox-dockhand-oidc # (1)!
  1. Enabling OIDC¶

    This optional tag deploys Dockhand and also primes it for OIDC authentication:

    • Creates a local admin user (required to enable authentication)
    • Registers an OIDC provider based on your selected SSO middleware provider or the dockhand_role_oidc_provider value.
    • Generates an Authelia OIDC client configuration snippet at /tmp/dockhand_oidc_client.yml
    Note

    It's unnecessary to run the dockhand-oidc tag more than once, unless you need a snippet generated again.

    Finishing the setup¶

    1. Copy and paste the client block from the snippet into your Authelia configuration, adjusting the values to your preference, and restart the Authelia container.
    2. Turn on authentication in the Dockhand UI.
    3. Confirm success by logging out and in through OIDC
    1. You can use the snippet as a reference to fill out the provider's OIDC form.
    2. Turn on authentication in the Dockhand UI.
    3. Confirm success by logging out and in through OIDC

    Aligning deployment¶

    With authentication now handled by OIDC, you may want to disable Traefik SSO and local login:

    dockhand_role_disable_local_login: "true"
    dockhand_role_traefik_sso_middleware: ""
    

    Redeploy with the regular tag for changes to take effect.

Usage¶

Visit https://dockhand.iYOUR_DOMAIN_NAMEi.

Role Defaults¶

Variables can be customized using the Inventory. (1)

  1. Example override

    dockhand_name: "custom_value"
    

    Avoid overriding variables ending in _default

    When overriding variables that end in _default (like dockhand_docker_envs_default), you replace the entire default configuration. Future updates that add new default values will not be applied to your setup, potentially breaking functionality.

    Instead, use the corresponding _custom variable (like dockhand_docker_envs_custom) to add your changes. Custom values are merged with defaults, ensuring you receive updates.

dockhand_name
# Type: string
dockhand_name: dockhand
dockhand_role_postgres_deploy
# Enable PostgreSQL (false = SQLite)
# Type: bool (true/false)
dockhand_role_postgres_deploy: true
dockhand_role_database_url
# Type: string
dockhand_role_database_url: ""
dockhand_role_skip_df_collection
# Disable disk usage collection
# Valid values: "true", "false"
# Type: string
dockhand_role_skip_df_collection: ""
dockhand_role_disable_local_login
# Hide local username/password login form
# Valid values: "true", "false"
# Type: string
dockhand_role_disable_local_login: ""
dockhand_role_disable_whats_new
# Suppress post-upgrade "What's New" popup
# Valid values: "true", "false"
# Type: string
dockhand_role_disable_whats_new: ""
dockhand_role_dns_result_order
# Outbound DNS family preference
# Valid values: "ipv4first", "verbatim", "ipv6first"
# Type: string
dockhand_role_dns_result_order: ""
dockhand_role_export_metrics
# Expose Prometheus metrics at /metrics
# Valid values: "true", "false"
# Type: string
dockhand_role_export_metrics: ""
dockhand_role_trust_forwarded_headers
# Trust `X-Forwarded-For` / `X-Real-IP` for the client IP
# Valid values: "true", "false"
# Type: string
dockhand_role_trust_forwarded_headers: "true"
dockhand_role_disable_metrics
# Skip CPU/memory metrics collection entirely
# Valid values: "true", "false"
# Type: string
dockhand_role_disable_metrics: ""
dockhand_role_disable_events
# Skip container-event collection (start/stop/health/OOM)
# Valid values: "true", "false"
# Type: string
dockhand_role_disable_events: ""
dockhand_role_insight_enable
# Enable Docker socket INFO and SYSTEM access
# Type: bool (true/false)
dockhand_role_insight_enable: true
dockhand_role_cycle_enable
# Enable Docker socket container lifecycle access
# Type: bool (true/false)
dockhand_role_cycle_enable: true
dockhand_role_logs_enable
# Enable Docker socket ALLOW_LOGS
# Type: bool (true/false)
dockhand_role_logs_enable: true
dockhand_role_exec_enable
# Enable Docker socket EXEC access
# Type: bool (true/false)
dockhand_role_exec_enable: false
dockhand_role_archive_enable
# Enable Docker socket ALLOW_ARCHIVE
# Type: bool (true/false)
dockhand_role_archive_enable: false
dockhand_role_oidc_provider
# OIDC provider name
# If empty will fall back to your default SSO middleware provider
# Type: string
dockhand_role_oidc_provider: ""
dockhand_role_postgres_name
# Type: string
dockhand_role_postgres_name: "{{ dockhand_name }}-postgres"
dockhand_role_postgres_user
# If empty it will fall back to postgres role default
# Type: string
dockhand_role_postgres_user: ""
dockhand_role_postgres_password
# If empty it will fall back to postgres role default
# Type: string
dockhand_role_postgres_password: ""
dockhand_role_postgres_docker_env_db
# Type: string
dockhand_role_postgres_docker_env_db: "{{ dockhand_name }}"
dockhand_role_postgres_docker_image_tag
# Type: string
dockhand_role_postgres_docker_image_tag: "16-alpine"
dockhand_role_postgres_docker_image_repo
# Type: string
dockhand_role_postgres_docker_image_repo: "postgres"
dockhand_role_postgres_paths_folder
# Type: string
dockhand_role_postgres_paths_folder: "{{ dockhand_name }}"
dockhand_role_postgres_paths_location
# Type: string
dockhand_role_postgres_paths_location: "{{ server_appdata_path }}/{{ dockhand_role_postgres_paths_folder }}/postgres"
dockhand_role_postgres_docker_healthcheck
# Type: dict
dockhand_role_postgres_docker_healthcheck:
  test:
    - "CMD"
    - "pg_isready"
    - "-d"
    - "{{ lookup('role_var', '_postgres_docker_env_db', role='dockhand') }}"
    - "-U"
    - "{{ lookup('role_var', '_postgres_user', role='dockhand', default=lookup('role_var', '_docker_env_user', role='postgres'), default_if_empty=true) }}"
  start_period: 20s
  interval: 30s
  retries: 5
  timeout: 5s
dockhand_role_postgres_labels_default
# Type: dict
dockhand_role_postgres_labels_default:
  dockhand.update: "false"
  dockhand.notify: "false"
dockhand_role_postgres_labels_custom
# Type: dict
dockhand_role_postgres_labels_custom: {}
dockhand_role_docker_socket_proxy_name
# Type: string
dockhand_role_docker_socket_proxy_name: "{{ dockhand_name }}-docker-socket-proxy"
dockhand_role_docker_socket_proxy_envs_default
# Type: dict
dockhand_role_docker_socket_proxy_envs_default:
  CONTAINERS: "1"
  IMAGES: "1"
  NETWORKS: "1"
  VOLUMES: "1"
  EVENTS: "1"
  POST: "1"
  DELETE: "1"
  INFO: "{{ '1'
         if lookup('role_var', '_insight_enable', role='dockhand')
         else omit }}"
  SYSTEM: "{{ '1'
           if lookup('role_var', '_insight_enable', role='dockhand')
           else omit }}"
  ALLOW_START: "{{ '1'
                if lookup('role_var', '_cycle_enable', role='dockhand')
                else omit }}"
  ALLOW_STOP: "{{ '1'
               if lookup('role_var', '_cycle_enable', role='dockhand')
               else omit }}"
  ALLOW_RESTARTS: "{{ '1'
                   if lookup('role_var', '_cycle_enable', role='dockhand')
                   else omit }}"
  ALLOW_LOGS: "{{ '1'
               if lookup('role_var', '_logs_enable', role='dockhand')
               else omit }}"
  EXEC: "{{ '1'
         if lookup('role_var', '_exec_enable', role='dockhand')
         else omit }}"
  ALLOW_ARCHIVE: "{{ '1'
                  if lookup('role_var', '_archive_enable', role='dockhand')
                  else omit }}"
dockhand_role_docker_socket_proxy_envs_custom
# Type: dict
dockhand_role_docker_socket_proxy_envs_custom: {}
dockhand_role_docker_socket_proxy_labels_default
# Type: dict
dockhand_role_docker_socket_proxy_labels_default:
  dockhand.update: "false"
  dockhand.notify: "false"
dockhand_role_docker_socket_proxy_labels_custom
# Type: dict
dockhand_role_docker_socket_proxy_labels_custom: {}
dockhand_role_web_subdomain
# Type: string
dockhand_role_web_subdomain: "{{ dockhand_name }}"
dockhand_role_web_domain
# Type: string
dockhand_role_web_domain: "{{ user.domain }}"
dockhand_role_web_port
# Type: string
dockhand_role_web_port: "3000"
dockhand_role_web_url
# Type: string
dockhand_role_web_url: "{{ lookup('role_web', role='dockhand', scheme='https') }}"
dockhand_role_web_host
# Type: string
dockhand_role_web_host: "{{ lookup('role_web', role='dockhand') }}"
dockhand_role_dns_record
# Type: string
dockhand_role_dns_record: "{{ lookup('role_var', '_web_subdomain', role='dockhand') }}"
dockhand_role_dns_zone
# Type: string
dockhand_role_dns_zone: "{{ lookup('role_var', '_web_domain', role='dockhand') }}"
dockhand_role_dns_proxy
# Type: bool (true/false)
dockhand_role_dns_proxy: "{{ dns_proxied }}"
dockhand_role_traefik_sso_middleware
# Type: string
dockhand_role_traefik_sso_middleware: "{{ traefik_default_sso_middleware }}"
dockhand_role_traefik_middleware_default
# Type: string
dockhand_role_traefik_middleware_default: "{{ traefik_default_middleware }}"
dockhand_role_traefik_middleware_custom
# Type: string
dockhand_role_traefik_middleware_custom: ""
dockhand_role_traefik_middleware_default_api
# Type: string
dockhand_role_traefik_middleware_default_api: "{{ traefik_default_middleware_api }}"
dockhand_role_traefik_middleware_custom_api
# Type: string
dockhand_role_traefik_middleware_custom_api: ""
dockhand_role_traefik_certresolver
# Type: string
dockhand_role_traefik_certresolver: "{{ traefik_default_certresolver }}"
dockhand_role_traefik_enabled
# Type: bool (true/false)
dockhand_role_traefik_enabled: true
dockhand_role_traefik_api_enabled
# Type: bool (true/false)
dockhand_role_traefik_api_enabled: true
dockhand_role_traefik_api_endpoint
# Type: string
dockhand_role_traefik_api_endpoint: "PathPrefix(`/api`)"

Container

dockhand_role_docker_container
# Type: string
dockhand_role_docker_container: "{{ dockhand_name }}"

Image

dockhand_role_docker_image_pull
# Type: bool (true/false)
dockhand_role_docker_image_pull: true
dockhand_role_docker_image_repo
# Type: string
dockhand_role_docker_image_repo: "fnsys/dockhand"
dockhand_role_docker_image_tag
# Type: string
dockhand_role_docker_image_tag: "latest"
dockhand_role_docker_image
# Type: string
dockhand_role_docker_image: "{{ lookup('role_var', '_docker_image_repo', role='dockhand') }}:{{ lookup('role_var', '_docker_image_tag', role='dockhand') }}"

Envs

dockhand_role_docker_envs_database_url
# Type: string
dockhand_role_docker_envs_database_url: "{{ lookup('role_var',
                                                   '_database_url',
                                                   role='dockhand',
                                                   default=lookup('role_var', '_postgres_database_url', role='dockhand'),
                                                   default_if_empty=true) }}"
dockhand_role_docker_envs_dns_result_order
# Type: string
dockhand_role_docker_envs_dns_result_order: "{{ 'verbatim'
                                             if (dns_ipv4_enabled and dns_ipv6_enabled)
                                             else 'ipv6first'
                                                  if dns_ipv6_enabled
                                                  else '' }}"
dockhand_role_docker_envs_default
# Type: dict
dockhand_role_docker_envs_default:
  PUID: "{{ uid }}"
  PGID: "{{ gid }}"
  TZ: "{{ tz }}"
  DATABASE_URL: "{{ lookup('role_var', '_docker_envs_database_url', role='dockhand')
                 if lookup('role_var', '_postgres_deploy', role='dockhand')
                 else omit }}"
  SKIP_DF_COLLECTION: "{{ lookup('role_var', '_skip_df_collection', role='dockhand', default=omit, default_if_empty=true) }}"
  DISABLE_LOCAL_LOGIN: "{{ lookup('role_var', '_disable_local_login', role='dockhand', default=omit, default_if_empty=true) }}"
  DISABLE_WHATS_NEW: "{{ lookup('role_var', '_disable_whats_new', role='dockhand', default=omit, default_if_empty=true) }}"
  DNS_RESULT_ORDER: "{{ lookup('role_var',
                               '_dns_result_order',
                               role='dockhand',
                               default=lookup('role_var', '_docker_envs_dns_result_order', role='dockhand'),
                               default_if_empty=true) }}"
  EXPORT_METRICS: "{{ lookup('role_var', '_export_metrics', role='dockhand', default=omit, default_if_empty=true) }}"
  TRUST_FORWARDED_HEADERS: "{{ lookup('role_var', '_trust_forwarded_headers', role='dockhand', default=omit, default_if_empty=true) }}"
  DISABLE_METRICS: "{{ lookup('role_var', '_disable_metrics', role='dockhand', default=omit, default_if_empty=true) }}"
  DISABLE_EVENTS: "{{ lookup('role_var', '_disable_events', role='dockhand', default=omit, default_if_empty=true) }}"
dockhand_role_docker_envs_custom
# Type: dict
dockhand_role_docker_envs_custom: {}

Volumes

dockhand_role_docker_volumes_default
# Type: list
dockhand_role_docker_volumes_default:
  - "{{ dockhand_role_paths_location }}:/app/data"
dockhand_role_docker_volumes_custom
# Type: list
dockhand_role_docker_volumes_custom: []

Hostname

dockhand_role_docker_hostname
# Type: string
dockhand_role_docker_hostname: "{{ dockhand_name }}"

Networks

dockhand_role_docker_networks_alias
# Type: string
dockhand_role_docker_networks_alias: "{{ dockhand_name }}"
dockhand_role_docker_networks_default
# Type: list
dockhand_role_docker_networks_default: []
dockhand_role_docker_networks_custom
# Type: list
dockhand_role_docker_networks_custom: []

Restart Policy

dockhand_role_docker_restart_policy
# Type: string
dockhand_role_docker_restart_policy: unless-stopped

Dependencies

dockhand_role_depends_on
# Type: string
dockhand_role_depends_on: "{{ lookup('role_var', '_postgres_name', role='dockhand')
                           if lookup('role_var', '_postgres_deploy', role='dockhand')
                           else lookup('role_var', '_docker_socket_proxy_name', role='dockhand') }}"
dockhand_role_depends_on_delay
# Type: string (quoted number)
dockhand_role_depends_on_delay: "0"
dockhand_role_depends_on_healthchecks
# Type: string ("true"/"false")
dockhand_role_depends_on_healthchecks: "false"

The following advanced options are available via create_docker_container but are not defined in the role. See: docker_container module

A blank value is YAML null and inherits any lower-precedence role or shared default. Explicit Ansible omit is accepted only for optional Docker settings; default-backed and required settings reject it. Use the documented typed empty value, such as "", [], or {}, when disabling a guaranteed setting.

GPU

dockhand_role_docker_gpu_enabled
# Set this to true to let the app use a GPU.
# Intel access also requires gpu.intel: true.
# NVIDIA access also requires nvidia_enabled: true.
# This setting does not install or enable GPU support on the server.
# Type: bool (true/false)
dockhand_role_docker_gpu_enabled: false
dockhand_role_docker_nvidia_disabled
# Set this to true to turn off automatic NVIDIA access for this app.
# It only has an effect when the app's _docker_gpu_enabled option and
# nvidia_enabled are both true.
# Automatic /dev/dri access may remain.
# Type: bool (true/false)
dockhand_role_docker_nvidia_disabled: false
dockhand_role_docker_dev_dri_disabled
# Set this to true to stop Saltbox from automatically sharing the
# server's /dev/dri video devices with this app.
# It only has an effect when the app's _docker_gpu_enabled option is true
# and either gpu.intel or nvidia_enabled is true.
# NVIDIA-specific access may remain.
# Type: bool (true/false)
dockhand_role_docker_dev_dri_disabled: false

Resource Limits

dockhand_role_docker_blkio_weight
# Type: int
dockhand_role_docker_blkio_weight:
dockhand_role_docker_cpu_period
# Type: int
dockhand_role_docker_cpu_period:
dockhand_role_docker_cpu_quota
# Type: int
dockhand_role_docker_cpu_quota:
dockhand_role_docker_cpu_shares
# Type: int
dockhand_role_docker_cpu_shares:
dockhand_role_docker_cpus
# CPU allocation accepted as a numeric string, such as 1.5
# Type: string (quoted number)
dockhand_role_docker_cpus:
dockhand_role_docker_cpuset_cpus
# Type: string
dockhand_role_docker_cpuset_cpus:
dockhand_role_docker_cpuset_mems
# Type: string
dockhand_role_docker_cpuset_mems:
dockhand_role_docker_kernel_memory
# Type: string
dockhand_role_docker_kernel_memory:
dockhand_role_docker_memory
# Type: string
dockhand_role_docker_memory:
dockhand_role_docker_memory_reservation
# Type: string
dockhand_role_docker_memory_reservation:
dockhand_role_docker_memory_swap
# Type: string
dockhand_role_docker_memory_swap:
dockhand_role_docker_memory_swappiness
# Type: int
dockhand_role_docker_memory_swappiness:
dockhand_role_docker_shm_size
# Type: string
dockhand_role_docker_shm_size:

Security & Devices

dockhand_role_docker_cap_drop
# Type: list
dockhand_role_docker_cap_drop:
dockhand_role_docker_cgroupns_mode
# Type: string
dockhand_role_docker_cgroupns_mode:
dockhand_role_docker_device_cgroup_rules
# Type: list
dockhand_role_docker_device_cgroup_rules:
dockhand_role_docker_device_read_bps
# Type: list
dockhand_role_docker_device_read_bps:
dockhand_role_docker_device_read_iops
# Type: list
dockhand_role_docker_device_read_iops:
dockhand_role_docker_device_requests
# Type: list
dockhand_role_docker_device_requests:
dockhand_role_docker_device_write_bps
# Type: list
dockhand_role_docker_device_write_bps:
dockhand_role_docker_device_write_iops
# Type: list
dockhand_role_docker_device_write_iops:
dockhand_role_docker_devices
# Type: list
dockhand_role_docker_devices:
dockhand_role_docker_groups
# Type: list
dockhand_role_docker_groups:
dockhand_role_docker_privileged
# Type: bool (true/false)
dockhand_role_docker_privileged:
dockhand_role_docker_security_opts
# Type: list
dockhand_role_docker_security_opts:
dockhand_role_docker_user
# Type: string
dockhand_role_docker_user:
dockhand_role_docker_userns_mode
# Type: string
dockhand_role_docker_userns_mode:

Networking

dockhand_role_docker_dns_opts
# Type: list
dockhand_role_docker_dns_opts:
dockhand_role_docker_dns_search_domains
# Type: list
dockhand_role_docker_dns_search_domains:
dockhand_role_docker_dns_servers
# Type: list
dockhand_role_docker_dns_servers:
dockhand_role_docker_domainname
# Type: string
dockhand_role_docker_domainname:
dockhand_role_docker_exposed_ports
# Type: list
dockhand_role_docker_exposed_ports:
dockhand_role_docker_hosts
# Type: dict
dockhand_role_docker_hosts:
dockhand_role_docker_hosts_use_common
# Type: bool (true/false)
dockhand_role_docker_hosts_use_common:
dockhand_role_docker_ipc_mode
# Type: string
dockhand_role_docker_ipc_mode:
dockhand_role_docker_links
# Type: list
dockhand_role_docker_links:
dockhand_role_docker_network_mode
# Type: string
dockhand_role_docker_network_mode:
dockhand_role_docker_pid_mode
# Type: string
dockhand_role_docker_pid_mode:
dockhand_role_docker_ports
# Type: list
dockhand_role_docker_ports:
dockhand_role_docker_uts
# Type: string
dockhand_role_docker_uts:

Storage

dockhand_role_docker_keep_volumes
# Type: bool (true/false)
dockhand_role_docker_keep_volumes:
dockhand_role_docker_mounts
# Type: list
dockhand_role_docker_mounts:
dockhand_role_docker_storage_opts
# Type: dict
dockhand_role_docker_storage_opts:
dockhand_role_docker_tmpfs
# Type: list
dockhand_role_docker_tmpfs:
dockhand_role_docker_volume_driver
# Type: string
dockhand_role_docker_volume_driver:
dockhand_role_docker_volumes_from
# Type: list
dockhand_role_docker_volumes_from:
dockhand_role_docker_volumes_global
# Type: bool (true/false)
dockhand_role_docker_volumes_global:
dockhand_role_docker_working_dir
# Type: string
dockhand_role_docker_working_dir:

Monitoring & Lifecycle

dockhand_role_docker_auto_remove
# Type: bool (true/false)
dockhand_role_docker_auto_remove:
dockhand_role_docker_cleanup
# Type: bool (true/false)
dockhand_role_docker_cleanup:
dockhand_role_docker_force_kill
# Type: bool (true/false)
dockhand_role_docker_force_kill:
dockhand_role_docker_healthcheck
# Type: dict
dockhand_role_docker_healthcheck:
dockhand_role_docker_healthy_wait_timeout
# Healthy-state wait timeout in seconds
# Type: int
dockhand_role_docker_healthy_wait_timeout:
dockhand_role_docker_init
# Type: bool (true/false)
dockhand_role_docker_init:
dockhand_role_docker_kill_signal
# Type: string
dockhand_role_docker_kill_signal:
dockhand_role_docker_log_driver
# Type: string
dockhand_role_docker_log_driver:
dockhand_role_docker_log_options
# Type: dict
dockhand_role_docker_log_options:
dockhand_role_docker_oom_killer
# Type: bool (true/false)
dockhand_role_docker_oom_killer:
dockhand_role_docker_oom_score_adj
# Type: int
dockhand_role_docker_oom_score_adj:
dockhand_role_docker_output_logs
# Type: bool (true/false)
dockhand_role_docker_output_logs:
dockhand_role_docker_paused
# Type: bool (true/false)
dockhand_role_docker_paused:
dockhand_role_docker_recreate
# Type: bool (true/false)
dockhand_role_docker_recreate:
dockhand_role_docker_restart_retries
# Type: int
dockhand_role_docker_restart_retries:
dockhand_role_docker_stop_signal
# Type: string
dockhand_role_docker_stop_signal:
dockhand_role_docker_stop_timeout
# Type: int
dockhand_role_docker_stop_timeout:

Other Options

dockhand_role_docker_capabilities
# Type: list
dockhand_role_docker_capabilities:
dockhand_role_docker_cgroup_parent
# Type: string
dockhand_role_docker_cgroup_parent:
dockhand_role_docker_commands
# Type: list
dockhand_role_docker_commands:
dockhand_role_docker_create_timeout
# Type: int
dockhand_role_docker_create_timeout:
dockhand_role_docker_entrypoint
# Type: list
dockhand_role_docker_entrypoint:
dockhand_role_docker_env_file
# Type: string
dockhand_role_docker_env_file:
dockhand_role_docker_labels
# Type: dict
dockhand_role_docker_labels:
dockhand_role_docker_labels_use_common
# Type: bool (true/false)
dockhand_role_docker_labels_use_common:
dockhand_role_docker_read_only
# Type: bool (true/false)
dockhand_role_docker_read_only:
dockhand_role_docker_runtime
# Type: string
dockhand_role_docker_runtime:
dockhand_role_docker_sysctls
# Type: dict
dockhand_role_docker_sysctls:
dockhand_role_docker_ulimits
# Type: list
dockhand_role_docker_ulimits:
dockhand_role_autoheal_enabled
# Enable or disable Autoheal monitoring for the container created when deploying
# Type: bool (true/false)
dockhand_role_autoheal_enabled: true
dockhand_role_diun_enabled
# Enable or disable Diun update notifications for the container created when deploying
# Type: bool (true/false)
dockhand_role_diun_enabled: true
dockhand_role_dns_enabled
# Enable or disable automatic DNS record creation for the container
# Type: bool (true/false)
dockhand_role_dns_enabled: true
dockhand_role_docker_controller
# Enable or disable Saltbox Docker Controller management for the container
# Type: bool (true/false)
dockhand_role_docker_controller: true
dockhand_role_docker_networks_alias_custom
# Type: list
dockhand_role_docker_networks_alias_custom:
dockhand_role_docker_volumes_download
# Type: bool (true/false)
dockhand_role_docker_volumes_download:
dockhand_role_paths_folders_list_custom
# Extra directories to create
# Type: list
dockhand_role_paths_folders_list_custom:
dockhand_role_paths_group
# Group for directories created by the role
# Type: string
dockhand_role_paths_group:
dockhand_role_paths_owner
# Owner for directories created by the role
# Type: string
dockhand_role_paths_owner:
dockhand_role_paths_permissions
# Permissions for directories created by the role
# Type: string
dockhand_role_paths_permissions:
dockhand_role_paths_recursive
# Apply owner and group recursively without changing child modes
# Type: bool (true/false)
dockhand_role_paths_recursive:
dockhand_role_themepark_addons
# ThemePark addon names to enable
# Type: list
dockhand_role_themepark_addons:
dockhand_role_themepark_app
# Type: string
dockhand_role_themepark_app:
dockhand_role_themepark_theme
# Type: string
dockhand_role_themepark_theme:
dockhand_role_traefik_api_middleware_http
# Type: string
dockhand_role_traefik_api_middleware_http:
dockhand_role_traefik_autodetect_enabled
# Enable Traefik autodetect middleware for the container
# Type: bool (true/false)
dockhand_role_traefik_autodetect_enabled: false
dockhand_role_traefik_crowdsec_enabled
# Enable CrowdSec middleware for the container
# Type: bool (true/false)
dockhand_role_traefik_crowdsec_enabled: false
dockhand_role_traefik_error_pages_enabled
# Enable custom error pages middleware for the container
# Type: bool (true/false)
dockhand_role_traefik_error_pages_enabled: false
dockhand_role_traefik_gzip_enabled
# Enable gzip compression middleware for the container
# Type: bool (true/false)
dockhand_role_traefik_gzip_enabled: false
dockhand_role_traefik_middleware_http
# Type: string
dockhand_role_traefik_middleware_http:
dockhand_role_traefik_middleware_http_api_insecure
# Type: bool (true/false)
dockhand_role_traefik_middleware_http_api_insecure:
dockhand_role_traefik_middleware_http_insecure
# Type: bool (true/false)
dockhand_role_traefik_middleware_http_insecure:
dockhand_role_traefik_priority
# Type: string
dockhand_role_traefik_priority:
dockhand_role_traefik_robot_enabled
# Enable robots.txt middleware for the container
# Type: bool (true/false)
dockhand_role_traefik_robot_enabled: true
dockhand_role_traefik_tailscale_enabled
# Enable Tailscale-specific Traefik configuration for the container
# Type: bool (true/false)
dockhand_role_traefik_tailscale_enabled: false
dockhand_role_traefik_wildcard_enabled
# Enable wildcard certificate for the container
# Type: bool (true/false)
dockhand_role_traefik_wildcard_enabled: true
dockhand_role_web_api_http_port
# Type: string (quoted number)
dockhand_role_web_api_http_port:
dockhand_role_web_api_http_scheme
# Type: string ("http"/"https")
dockhand_role_web_api_http_scheme:
dockhand_role_web_api_http_serverstransport
# Type: dict/omit
dockhand_role_web_api_http_serverstransport:
dockhand_role_web_api_port
# Type: string (quoted number)
dockhand_role_web_api_port:
dockhand_role_web_api_scheme
# Type: string ("http"/"https")
dockhand_role_web_api_scheme:
dockhand_role_web_api_serverstransport
# Type: dict/omit
dockhand_role_web_api_serverstransport:
dockhand_role_web_fqdn_override
# Override the Traefik fully qualified domain name (FQDN) for the container
# Type: list
dockhand_role_web_fqdn_override:

Example Override

dockhand_role_web_fqdn_override:
  - "{{ traefik_host }}"
  - "dockhand2.{{ user.domain }}"
  - "dockhand.otherdomain.tld"

Note: Include {{ traefik_host }} to preserve the default FQDN alongside your custom entries

dockhand_role_web_host_override
# Override the Traefik web host configuration for the container
# Type: string
dockhand_role_web_host_override:

Example Override

dockhand_role_web_host_override: "Host(`{{ traefik_host }}`) || Host(`{{ 'dockhand2.' + user.domain }}`)"

Note: Use {{ traefik_host }} to include the default host configuration in your custom rule

dockhand_role_web_http_port
# Type: string (quoted number)
dockhand_role_web_http_port:
dockhand_role_web_http_scheme
# Type: string ("http"/"https")
dockhand_role_web_http_scheme:
dockhand_role_web_http_serverstransport
# Type: dict/omit
dockhand_role_web_http_serverstransport:
dockhand_role_web_scheme
# URL scheme to use for web access to the container
# Type: string ("http"/"https")
dockhand_role_web_scheme:
dockhand_role_web_serverstransport
# Type: dict/omit
dockhand_role_web_serverstransport: