{ "schema_version": "0.4.0", "kind": "proxmenux.oci-template", "id": "linuxserver-duplicati", "status": "laboratory-validated", "catalog_ui": { "title": { "en_US": "Duplicati" }, "tagline": { "en_US": "Duplicati is a backup client that securely stores encrypted, incremental, compressed backups on local storage, cloud storage services and remote file servers. It works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon S3, Google Drive, box.com, Mega, B2, and many others." }, "description": { "en_US": "Duplicati is a backup client that securely stores encrypted, incremental, compressed backups on local storage, cloud storage services and remote file servers. It works with standard protocols like FTP, SSH, WebDAV as well as popular services like Microsoft OneDrive, Amazon S3, Google Drive, box.com, Mega, B2, and many others." }, "category": "backup", "category_label": "Backup & Recovery", "author": "LinuxServer.io", "developer": null, "icon": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/duplicati-icon.png", "thumbnail": "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/duplicati-banner.png", "screenshots": [], "architectures": [ "amd64", "arm64" ], "launch": { "scheme": "http", "port": 8200, "path": "/" }, "website": "https://www.duplicati.com/", "documentation": "https://docs.linuxserver.io/images/docker-duplicati/", "repository": "https://github.com/linuxserver/docker-duplicati", "tips": [], "mini_changelog": [ { "date": "2026-09-03", "note": "Make sure /config is only accessible by the PUID user." }, { "date": "2025-01-31", "note": "Make `latest` stable releases, move beta releases to `development`." }, { "date": "2025-01-28", "note": "Add xz-utils." }, { "date": "2024-12-03", "note": "Add mscorefonts for captcha support." }, { "date": "2024-11-29", "note": "Rebase to Noble, add support for settings DB encryption." } ], "display_version": null, "updated_at": "2026-09-03" }, "source": { "provider": "linuxserver.io", "repository": "https://github.com/linuxserver/docker-duplicati", "default_branch": "master", "revision": "63a71b5a130e008f9bf20df18820f6bee1b771f3", "readme_raw_url": "https://raw.githubusercontent.com/linuxserver/docker-duplicati/63a71b5a130e008f9bf20df18820f6bee1b771f3/README.md", "readme_pushed_at": "2026-09-12T08:31:37Z", "compose_sha256": "5f149ca1dc249caeec8903c4d9f08c5632ff52e1ec28cee05259a431f830cbaa", "generated_at": "2026-09-13T14:38:33+00:00" }, "container_contract": { "service_name": "duplicati", "container_name": "duplicati", "image": { "reference": "lscr.io/linuxserver/duplicati:latest", "registry": "lscr.io", "repository": "lscr.io/linuxserver/duplicati", "tag": "latest", "digest": null, "pull_policy": "resolve-selected-tag-to-architecture-digest-at-install" }, "environment": [ { "name": "PUID", "example": "1000", "required": true, "sensitive": false, "source": "linuxserver-compose" }, { "name": "PGID", "example": "1000", "required": true, "sensitive": false, "source": "linuxserver-compose" }, { "name": "TZ", "example": "Etc/UTC", "required": true, "sensitive": false, "source": "linuxserver-compose" }, { "name": "SETTINGS_ENCRYPTION_KEY", "example": "", "required": true, "sensitive": true, "source": "linuxserver-compose" }, { "name": "CLI_ARGS", "example": "", "required": false, "sensitive": false, "source": "linuxserver-compose" }, { "name": "DUPLICATI__WEBSERVICE_PASSWORD", "example": "", "required": false, "sensitive": true, "source": "linuxserver-compose" } ], "volumes": [ { "id": "volume-0", "container_path": "/config", "compose_source_example": "/path/to/duplicati/config", "read_only": false, "required": true, "installation_choice": [ "managed-volume", "host-bind" ], "default": "managed-volume", "managed_volume": { "backup": true, "default_size_gb": 4 } }, { "id": "volume-1", "container_path": "/backups", "compose_source_example": "/path/to/backups", "read_only": false, "required": true, "installation_choice": [ "managed-volume", "host-bind" ], "default": "managed-volume", "managed_volume": { "backup": true, "default_size_gb": 8 } }, { "id": "volume-2", "container_path": "/source", "compose_source_example": "/path/to/source", "read_only": false, "required": true, "installation_choice": [ "managed-volume", "host-bind" ], "default": "managed-volume", "managed_volume": { "backup": true, "default_size_gb": 8 } } ], "ports": [ { "container_port": 8200, "published_example": 8200, "protocol": "tcp", "required": true, "proxmox_behavior": "listener-on-dedicated-lxc-address-no-nat" } ], "related_services": [], "restart": "unless-stopped", "stop_grace_period": null, "original_compose": "---\nservices:\n duplicati:\n image: lscr.io/linuxserver/duplicati:latest\n container_name: duplicati\n environment:\n - PUID=1000\n - PGID=1000\n - TZ=Etc/UTC\n - SETTINGS_ENCRYPTION_KEY=\n - CLI_ARGS= #optional\n - DUPLICATI__WEBSERVICE_PASSWORD= #optional\n volumes:\n - /path/to/duplicati/config:/config\n - /path/to/backups:/backups\n - /path/to/source:/source\n ports:\n - 8200:8200\n restart: unless-stopped\n" }, "first_run": { "endpoints": [ { "label": "Web UI", "scheme": "http", "port": 8200, "path": "/", "source": "compose-first-tcp-port-fallback" } ], "credentials": [] }, "proxmox": { "runtime": "native-oci-lxc", "technology_status": "proxmox-technology-preview", "defaults": { "unprivileged": true, "ostype": "auto-from-image", "cores": 2, "memory_mb": 1024, "swap_mb": 512, "rootfs_size_gb": 8, "rootfs_storage": "local-lvm", "volume_storage": "local-lvm", "template_storage": "local", "bridge": "vmbr0", "ipv4": "dhcp", "firewall": true, "host_managed_network": true, "onboot": false, "features": [ "nesting=1" ], "shutdown_timeout_seconds": 30 }, "image_metadata_policy": { "entrypoint": "import-from-oci-image", "cmd": "import-from-oci-image", "environment": "import-image-env-then-apply-compose-overrides", "user": "import-from-oci-image", "working_dir": "import-from-oci-image", "stop_signal": "import-from-oci-image" }, "installer_profile": { "generated_sensitive_environment": { "SETTINGS_ENCRYPTION_KEY": { "strategy": "token-hex", "bytes": 16, "prompt": false } } }, "adaptations": [ { "id": "dedicated-lxc-network", "upstream_behavior": "Docker publishes selected container ports on the Docker host.", "native_lxc_behavior": "The application listens on the same container ports at its dedicated LXC address.", "reason": "A native LXC has its own address and does not require Docker port NAT.", "behavioral_impact": "Users open the LXC address instead of the Proxmox host address.", "validation": "pending-per-application" }, { "id": "compose-environment-overlay", "upstream_behavior": "Compose environment values override OCI image environment values.", "native_lxc_behavior": "ProxMenux merges the same values into lxc.environment.runtime while the CT is stopped.", "reason": "PVE imports image Env automatically; Compose values still need to override it.", "behavioral_impact": "None expected.", "validation": "pending-per-application" }, { "id": "stop-grace-period", "upstream_behavior": "Docker waits for Compose stop_grace_period before forcing termination.", "native_lxc_behavior": "ProxMenux records the same timeout for its pct shutdown lifecycle operations.", "reason": "Proxmox has no equivalent per-CT persistent restart-policy field; startup.down is not a shutdown timeout.", "behavioral_impact": "Normal Proxmox node shutdown remains governed by the node-wide shutdown policy.", "validation": "not-requested-by-compose" }, { "id": "compose-shm-size", "upstream_behavior": "Compose sets the size of the container /dev/shm tmpfs.", "native_lxc_behavior": "ProxMenux mounts a native LXC tmpfs at /dev/shm with the same requested capacity.", "reason": "The OCI image runs directly as an LXC and therefore needs the equivalent Proxmox mount entry.", "behavioral_impact": "None expected.", "validation": "not-requested-by-compose" }, { "id": "compose-command", "upstream_behavior": "Compose replaces the image Cmd while retaining its Entrypoint.", "native_lxc_behavior": "ProxMenux reads the official OCI Entrypoint and combines it with the Compose command as the native LXC init command.", "reason": "Proxmox stores the effective OCI process as one entrypoint string.", "behavioral_impact": "None expected.", "validation": "not-requested-by-compose" } ] }, "compatibility": { "automatic_install_candidate": true, "validated": false, "supported_compose_keys": [ "command", "container_name", "environment", "image", "ports", "restart", "shm_size", "stop_grace_period", "volumes" ], "untranslated_blockers": [], "policy": "A generated template is never promoted to validated without install, health, restart and persistence tests." }, "validation": { "schema": "passed-at-generation", "clean_install": "passed-amd64", "service_health": "passed-amd64", "restart_persistence": "pending", "backup_restore": "pending", "update_preserves_data": "pending" }, "lifecycle": { "update_strategy": "replace-rootfs-from-new-oci-image-preserve-managed-volumes", "registry_state": { "resolved_architecture": null, "resolved_digest": null, "image_version_label": null, "image_created": null }, "change_detection": "compare-resolved-architecture-digest", "automatic_unattended_updates": false } }