TFTP Server

Get Started with Apps!
Keywords: tftp, netboot
Train: Community
Home Page: https://github.com/truenas/containers/tree/main/apps/tftpd-hpa
Added: 2024-08-27
Last Updated: 2025-04-23
A lightweight tftp-server
Run as Context- TFTP requires root privileges to start it's processes.
Group: 0 / root
User: 0 / root
Security Capabilities
- TFTP requires this ability to bind to port 69 for TFTP.
- TFTP requires this ability to switch user for sub-processes.
- TFTP requires this ability to switch group for sub-processes.
- TFTP requires this ability to use chroot for it's sub-processes.
App Metadata (Raw File)
{
"1.1.11": {
"healthy": true,
"supported": true,
"healthy_error": null,
"location": "/__w/apps/apps/trains/community/tftpd-hpa/1.1.11",
"last_update": "2025-04-23 17:40:39",
"required_features": [],
"human_version": "1.0.0_1.1.11",
"version": "1.1.11",
"app_metadata": {
"app_version": "1.0.0",
"capabilities": [
{
"description": "TFTP requires this ability to bind to port 69 for TFTP.",
"name": "NET_BIND_SERVICE"
},
{
"description": "TFTP requires this ability to switch user for sub-processes.",
"name": "SETUID"
},
{
"description": "TFTP requires this ability to switch group for sub-processes.",
"name": "SETGID"
},
{
"description": "TFTP requires this ability to use chroot for it's sub-processes.",
"name": "SYS_CHROOT"
}
],
"categories": [
"networking"
],
"date_added": "2024-08-27",
"description": "A lightweight tftp-server",
"home": "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
"host_mounts": [],
"icon": "https://media.sys.truenas.net/apps/tftpd-hpa/icons/icon.png",
"keywords": [
"tftp",
"netboot"
],
"lib_version": "2.1.16",
"lib_version_hash": "dac15686f882b9ce65b8549a3d5c0ed7bafe2df7a9028880d1a99b0ff4af1eff",
"maintainers": [
{
"email": "dev@ixsystems.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "tftpd-hpa",
"run_as_context": [
{
"description": "TFTP requires root privileges to start it's processes.",
"gid": 0,
"group_name": "root",
"uid": 0,
"user_name": "root"
}
],
"screenshots": [],
"sources": [
"https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
"https://hub.docker.com/r/ixsystems/tftpd-hpa"
],
"title": "TFTP Server",
"train": "community",
"version": "1.1.11"
},
"schema": {
"groups": [
{
"name": "TFTPD Configuration",
"description": "Configure TFTPD"
},
{
"name": "Network Configuration",
"description": "Configure Network for TFTPD"
},
{
"name": "Storage Configuration",
"description": "Configure Storage for TFTPD"
},
{
"name": "Labels Configuration",
"description": "Configure Labels for TFTPD"
},
{
"name": "Resources Configuration",
"description": "Configure Resources for TFTPD"
}
],
"questions": [
{
"variable": "TZ",
"label": "Timezone",
"group": "TFTPD Configuration",
"schema": {
"type": "string",
"default": "Etc/UTC",
"required": true,
"$ref": [
"definitions/timezone"
]
}
},
{
"variable": "tftpd",
"label": "",
"group": "TFTPD Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "allow_create",
"label": "Allow Create",
"description": "Allow creation of files.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "additional_envs",
"label": "Additional Environment Variables",
"description": "Configure additional environment variables for TFTPD.",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "env",
"label": "Environment Variable",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "name",
"label": "Name",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "value",
"label": "Value",
"schema": {
"type": "string",
"required": true
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "network",
"label": "",
"group": "Network Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "tftp_port",
"label": "TFTP Port",
"description": "The port for TFTPD WebUI",
"schema": {
"type": "int",
"default": 30031,
"show_if": [
[
"host_network",
"=",
false
]
],
"required": true,
"$ref": [
"definitions/port"
]
}
},
{
"variable": "host_network",
"label": "Host Network",
"description": "Bind to the host network. It's recommended to keep this disabled.\n",
"schema": {
"type": "boolean",
"default": true
}
}
]
}
},
{
"variable": "storage",
"label": "",
"group": "Storage Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "tftpboot",
"label": "TFTPD tftpboot Storage",
"description": "The path to store TFTPD tftpboot.",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
"schema": {
"type": "string",
"required": true,
"immutable": true,
"default": "ix_volume",
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"immutable": true,
"hidden": true,
"default": "tftpboot"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
}
]
}
}
]
}
},
{
"variable": "additional_storage",
"label": "Additional Storage",
"description": "Additional storage for TFTPD.",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "storageEntry",
"label": "Storage Entry",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "type",
"label": "Type",
"description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to as a volume.\n",
"schema": {
"type": "string",
"required": true,
"default": "ix_volume",
"immutable": true,
"enum": [
{
"value": "host_path",
"description": "Host Path (Path that already exists on the system)"
},
{
"value": "ix_volume",
"description": "ixVolume (Dataset created automatically by the system)"
},
{
"value": "cifs",
"description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
}
]
}
},
{
"variable": "read_only",
"label": "Read Only",
"description": "Mount the volume as read only.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "mount_path",
"label": "Mount Path",
"description": "The path inside the container to mount the storage.",
"schema": {
"type": "path",
"required": true
}
},
{
"variable": "host_path_config",
"label": "Host Path Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"host_path"
]
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "acl",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": [],
"$ref": [
"normalize/acl"
]
}
},
{
"variable": "path",
"label": "Host Path",
"description": "The host path to use for storage.",
"schema": {
"type": "hostpath",
"show_if": [
[
"acl_enable",
"=",
false
]
],
"required": true
}
}
]
}
},
{
"variable": "ix_volume_config",
"label": "ixVolume Configuration",
"description": "The configuration for the ixVolume dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"ix_volume"
]
],
"$ref": [
"normalize/ix_volume"
],
"attrs": [
{
"variable": "acl_enable",
"label": "Enable ACL",
"description": "Enable ACL for the storage.",
"schema": {
"type": "boolean",
"default": false
}
},
{
"variable": "dataset_name",
"label": "Dataset Name",
"description": "The name of the dataset to use for storage.",
"schema": {
"type": "string",
"required": true,
"immutable": true,
"default": "storage_entry"
}
},
{
"variable": "acl_entries",
"label": "ACL Configuration",
"schema": {
"type": "dict",
"show_if": [
[
"acl_enable",
"=",
true
]
],
"attrs": []
}
}
]
}
},
{
"variable": "cifs_config",
"label": "SMB Configuration",
"description": "The configuration for the SMB dataset.",
"schema": {
"type": "dict",
"show_if": [
[
"type",
"=",
"cifs"
]
],
"attrs": [
{
"variable": "server",
"label": "Server",
"description": "The server to mount the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "path",
"label": "Path",
"description": "The path to mount the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "username",
"label": "Username",
"description": "The username to use for the SMB share.",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "password",
"label": "Password",
"description": "The password to use for the SMB share.",
"schema": {
"type": "string",
"required": true,
"private": true
}
},
{
"variable": "domain",
"label": "Domain",
"description": "The domain to use for the SMB share.",
"schema": {
"type": "string"
}
}
]
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "labels",
"label": "",
"group": "Labels Configuration",
"schema": {
"type": "list",
"default": [],
"items": [
{
"variable": "label",
"label": "Label",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "key",
"label": "Key",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "value",
"label": "Value",
"schema": {
"type": "string",
"required": true
}
},
{
"variable": "containers",
"label": "Containers",
"description": "Containers where the label should be applied",
"schema": {
"type": "list",
"items": [
{
"variable": "container",
"label": "Container",
"schema": {
"type": "string",
"required": true,
"enum": [
{
"value": "tftpd",
"description": "tftpd"
}
]
}
}
]
}
}
]
}
}
]
}
},
{
"variable": "resources",
"label": "",
"group": "Resources Configuration",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "limits",
"label": "Limits",
"schema": {
"type": "dict",
"attrs": [
{
"variable": "cpus",
"label": "CPUs",
"description": "CPUs limit for TFTPD.",
"schema": {
"type": "int",
"default": 2,
"required": true
}
},
{
"variable": "memory",
"label": "Memory (in MB)",
"description": "Memory limit for TFTPD.",
"schema": {
"type": "int",
"default": 4096,
"required": true
}
}
]
}
}
]
}
}
]
},
"readme": "<h1>TFTP</h1> <p><a href=\"https://manpages.debian.org/testing/tftpd-hpa/tftpd.8.en.html\">TFTP</a> is a server for the Trivial File Transfer Protocol.</p> <p>The app runs as <code>root</code> user and drops privileges to <code>tftp</code> (9069) user for the TFTP service.</p>",
"changelog": null,
"chart_metadata": {
"app_version": "1.0.0",
"capabilities": [
{
"description": "TFTP requires this ability to bind to port 69 for TFTP.",
"name": "NET_BIND_SERVICE"
},
{
"description": "TFTP requires this ability to switch user for sub-processes.",
"name": "SETUID"
},
{
"description": "TFTP requires this ability to switch group for sub-processes.",
"name": "SETGID"
},
{
"description": "TFTP requires this ability to use chroot for it's sub-processes.",
"name": "SYS_CHROOT"
}
],
"categories": [
"networking"
],
"date_added": "2024-08-27",
"description": "A lightweight tftp-server",
"home": "https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
"host_mounts": [],
"icon": "https://media.sys.truenas.net/apps/tftpd-hpa/icons/icon.png",
"keywords": [
"tftp",
"netboot"
],
"lib_version": "2.1.16",
"lib_version_hash": "dac15686f882b9ce65b8549a3d5c0ed7bafe2df7a9028880d1a99b0ff4af1eff",
"maintainers": [
{
"email": "dev@ixsystems.com",
"name": "truenas",
"url": "https://www.truenas.com/"
}
],
"name": "tftpd-hpa",
"run_as_context": [
{
"description": "TFTP requires root privileges to start it's processes.",
"gid": 0,
"group_name": "root",
"uid": 0,
"user_name": "root"
}
],
"screenshots": [],
"sources": [
"https://github.com/truenas/containers/tree/main/apps/tftpd-hpa",
"https://hub.docker.com/r/ixsystems/tftpd-hpa"
],
"title": "TFTP Server",
"train": "community",
"version": "1.1.11"
}
}
}
Support, maintenance, and documentation for applications within the Community catalog is handled by the TrueNAS community. The TrueNAS Applications Portal hosts but does not validate or maintain any linked resources associated with this app.