{"id":29782101,"url":"https://github.com/tecnativa/docker-duplicity","last_synced_at":"2026-01-16T10:27:47.136Z","repository":{"id":37546621,"uuid":"61793863","full_name":"Tecnativa/docker-duplicity","owner":"Tecnativa","description":"Docker image for running duplicity in a cron","archived":false,"fork":false,"pushed_at":"2026-01-14T09:31:53.000Z","size":2790,"stargazers_count":89,"open_issues_count":14,"forks_count":46,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-01-14T10:11:50.343Z","etag":null,"topics":["backup","docker","duplicity"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Tecnativa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-06-23T09:43:50.000Z","updated_at":"2026-01-14T08:12:39.000Z","dependencies_parsed_at":"2024-05-20T23:32:11.120Z","dependency_job_id":"97303397-9f60-4927-aa20-039be70bdbde","html_url":"https://github.com/Tecnativa/docker-duplicity","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/Tecnativa/docker-duplicity","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tecnativa%2Fdocker-duplicity","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tecnativa%2Fdocker-duplicity/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tecnativa%2Fdocker-duplicity/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tecnativa%2Fdocker-duplicity/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Tecnativa","download_url":"https://codeload.github.com/Tecnativa/docker-duplicity/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Tecnativa%2Fdocker-duplicity/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T06:30:42.265Z","status":"ssl_error","status_checked_at":"2026-01-16T06:30:16.248Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","docker","duplicity"],"created_at":"2025-07-27T14:11:36.942Z","updated_at":"2026-01-16T10:27:47.112Z","avatar_url":"https://github.com/Tecnativa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Last image-template](https://img.shields.io/badge/last%20template%20update-v0.1.3-informational)](https://github.com/Tecnativa/image-template/tree/v0.1.3)\n[![GitHub Container Registry](https://img.shields.io/badge/GitHub%20Container%20Registry-latest-%2324292e)](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity)\n\n# Duplicity Cron Runner\n\n\u003cdetails\u003e\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\u003csummary\u003eTable of contents\u003c/summary\u003e\n\n- [What?](#what)\n- [Why?](#why)\n- [How?](#how)\n- [Where?](#where)\n- [Available images](#available-images)\n- [Tags](#tags)\n- [Environment variables available](#environment-variables-available)\n  - [`CRONTAB_{15MIN,HOURLY,DAILY,WEEKLY,MONTHLY}`](#crontab_15minhourlydailyweeklymonthly)\n  - [`DBS_TO_{INCLUDE,EXCLUDE}`](#dbs_to_includeexclude)\n  - [`DST`](#dst)\n  - [`EMAIL_FROM`](#email_from)\n  - [`EMAIL_SUBJECT`](#email_subject)\n  - [`EMAIL_TO`](#email_to)\n  - [`JOB_*_WHAT`](#job__what)\n  - [`JOB_*_WHEN`](#job__when)\n  - [`JOB_*_HEALTHCHECKS_URL`](#job__healthchecks_url)\n  - [`JOB_*_UPTIME_KUMA_URL`](#job__uptime_kuma_url)\n  - [`OPTIONS`](#options)\n  - [`OPTIONS_EXTRA`](#options_extra)\n  - [`SMTP_HOST`](#smtp_host)\n  - [`SMTP_PORT`](#smtp_port)\n  - [`SMTP_USER`](#smtp_user)\n  - [`SMTP_PASS`](#smtp_pass)\n  - [`SMTP_TLS`](#smtp_tls)\n  - [`SMTP_REPORT_SUCCESS`](#smtp_report_success)\n  - [`SRC`](#src)\n  - [`TZ`](#tz)\n- [Set a custom hostname!](#set-a-custom-hostname)\n- [Pre and post scripts](#pre-and-post-scripts)\n- [Using Duplicity](#using-duplicity)\n  - [Shortcuts](#shortcuts)\n- [Testing your configuration](#testing-your-configuration)\n- [Prebuilt flavors](#prebuilt-flavors)\n  - [Normal (`docker-duplicity`)](#normal-docker-duplicity)\n  - [PostgreSQL (`docker-duplicity-postgres`)](#postgresql-docker-duplicity-postgres)\n  - [Docker (`docker-duplicity-docker`)](#docker-docker-duplicity-docker)\n  - [Amazon S3 (`*-s3`)](#amazon-s3--s3)\n  - [Multi (`*-multi`)](#multi--multi)\n- [Development](#development)\n  - [Testing](#testing)\n  - [Managing packages](#managing-packages)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c/details\u003e\n\n## What?\n\nThis image includes [Duplicity][] ready to make backups of whatever you need,\ncron-based.\n\n## Why?\n\nBecause you need to back things up regularly, and Duplicity is one of the best tools\navailable for such a purpose.\n\n## How?\n\nInstalling every possible Duplicity dependency to support all of its backends inside an\n[Alpine][] system that is very lightweight by itself, and a little job runner Python\nscript that takes care of converting some environment variables into flexible cron jobs\nand sending an email report automatically.\n\n## Where?\n\n- [Source code](https://github.com/Tecnativa/docker-duplicity).\n- [Prebuilt images in GitHub package registry](https://github.com/Tecnativa/docker-duplicity/packages/).\n\n## Available images\n\nEach of the built-in [flavors][flavors] is separated into a specific docker image:\n\n- [`docker-duplicity`](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity)\n- [`docker-duplicity-s3`](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity-s3)\n- [`docker-duplicity-docker`](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity-docker)\n- [`docker-duplicity-docker-s3`](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity-docker-s3)\n- [`docker-duplicity-postgres`](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity-postgres)\n- [`docker-duplicity-postgres-s3`](https://github.com/orgs/Tecnativa/packages/container/package/docker-duplicity-postgres-s3)\n\nCheck the [section bellow][flavors] to get more info.\n\n## Tags\n\nEach of the images mentioned above are tagged with `:latest`, referring to the latest\n_tagged_ version in git, and `:egde`, referring to the latest version in the `master`\nbranch. Each individual git released version is also tagged (e.g. `:0.1.0`)\n\n## Environment variables available\n\nApart from the [environment variables that Duplicity uses by default][env], you have\nothers specific for this image.\n\n### `CRONTAB_{15MIN,HOURLY,DAILY,WEEKLY,MONTHLY}`\n\nDefine the cron schedule to run jobs under such circumstances.\n\nPossibly non-obvious [defaults][dockerfile]:\n\n- Daily: 2 AM, from Monday to Saturday\n- Weekly: 1 AM, on Sundays\n- Monthly: 5 AM, 1st day of month\n\nHours are expressed in UTC.\n\n**If you define any of these variables wrongly, your cron might not work!**\n\nYou can use online tools such as https://crontab.guru to make it easy.\n\nIf you set these values in `.env` file, don't use quotes:\n\n```\nCRONTAB_15MIN=*/15 * * * *\nCRONTAB_HOURLY=0 * * * *\nCRONTAB_DAILY=0 2 * * MON-SAT\nCRONTAB_WEEKLY=0 1 * * SUN\nCRONTAB_MONTHLY=0 5 1 * *\n```\n\n### `DBS_TO_{INCLUDE,EXCLUDE}`\n\nOnly available in the [PostgreSQL flavors](#postgresql-docker-duplicity-postgres).\n\nDefine a Regular Expression to filter databases that shouldn't be included in the DB\ndump.\n\nYou can use this to avoid getting permission errors when running a backup against a\nserver where you don't control all the databases.\n\nFor example, if you don't want to include the databases named `DB1` and `DB2` you can\nuse:\n\n```bash\nDBS_TO_EXCLUDE=\"^(DB1|DB2)$\"\n```\n\nOr, if you only want to include those databases that start with `prod`:\n\n```sh\nDBS_TO_INCLUDE=\"^prod\"\n```\n\n### `DST`\n\nWhere to store the backup.\n\nExample: `ftps://user@example.com/some_dir`\n\n### `EMAIL_FROM`\n\nEmail report sender.\n\n### `EMAIL_SUBJECT`\n\nSubject of the email report. You can use these placeholders:\n\n- `{periodicity}` will be one of these:\n  - `15min`\n  - `hourly`\n  - `daily`\n  - `weekly`\n  - `monthly`\n- `{result}` will be:\n  - `OK` if all worked fine.\n  - `ERROR` if any job failed.\n- `{hostname}` will be the container's host name, including the domainname (a.k.a.\n  FQDN).\n\nThis variable is optional; the default is\n`Backup report: {hostname} - {periodicity} - {result}`\n\n### `EMAIL_TO`\n\nEmail report recipient. Multiple recipients can be defined as a comma-separated list of\nemails.\n\n### `JOB_*_WHAT`\n\nDefine a command that needs to be executed.\n\nCheck the `Dockerfile` to see built-in jobs.\n\n### `JOB_*_WHEN`\n\nDefine when to execute the command you defined in the previous section. If you need\nseveral values, you can separate them with spaces (example: `daily monthly`).\n\n[Prebuilt flavors][flavors] provide built-in jobs. You can disable those jobs by setting\ncorresponding `JOB_*_WHEN` to value `never`.\n\n### `JOB_*_HEALTHCHECKS_URL`\n\n[healthchecks](https://healthchecks.io/) URL to ping on job success or failure. Supports\n\"start\", \"success\", and \"failure\" pings. For a job that runs with multiple\nperiodicities, the periodicity can be added to the env var (e.g.\n`JOB_200_DAILY_HEALTHCHECKS_URL` or `JOB_200_WEEKLY_HEALTHCHECKS_URL`) to specify\ndifferent URLs for each run. Periodicity-specific env vars take precedence over the\ngeneral one.\n\n### `JOB_*_UPTIME_KUMA_URL`\n\n[uptime-kuma](https://github.com/louislam/uptime-kuma) push monitor URL to ping on job\nsuccess or failure. Supports \"up\" and \"down\" pings. Do not include any query parameters\nin the URL. For a job that runs with multiple periodicities, the periodicity can be\nadded to the env var (e.g. `JOB_200_DAILY_UPTIME_KUMA_URL` or\n`JOB_200_WEEKLY_UPTIME_KUMA_URL`) to specify different URLs for each run.\nPeriodicity-specific env vars take precedence over the general one.\n\n### `OPTIONS`\n\nString to let you define [options for duplicity][options].\n\n### `OPTIONS_EXTRA`\n\nString that some [prebuilt flavors][flavors] use to add custom options required for that\nflavor. You should never need to use this variable.\n\n### `SMTP_HOST`\n\nHost used to send the email report.\n\n### `SMTP_PORT`\n\nPort used to send the email report.\n\n### `SMTP_USER`\n\nIf your mail server requires authentication, specify the user account to log in.\n\n### `SMTP_PASS`\n\nIf your mail server requires authentication, specify the password for the SMTP_USER.\n\n### `SMTP_TLS`\n\nForce the email client to connect to the server using SLL/TLS. Note that the client will\nutilize STARTTLS, regardless of this variable, if the server offers STARTTLS.\n\n### `SMTP_REPORT_SUCCESS`\n\nIf enabled, report via SMTP regardless of exit status (this is the default behaviour).\nOtherwise, only report if one or more jobs failed.\n\n### `SRC`\n\nWhat to back up.\n\nExample: `file:///mnt/my_files`\n\nBy default, SRC is set to /mnt/backup/src/ inside the container. Simply mount any\nexternal directory as a volume to /mnt/backup/src/. If you wish to include multiple\ndirectories, mount them as subdirectories of /mnt/backup/src/, like...\n\n```yaml\nvolumes:\n  - /path/to/data/to/backup1:/mnt/backup/src/foldername1:ro\n  - /path/to/data/to/backup2:/mnt/backup/src/foldername2:ro\n```\n\n### `TZ`\n\nDefine a valid timezone (i.e. `Europe/Madrid` or `America/New_York`) to make log hours\nmatch your local reality.\n\nThis is achieved directly by bundling [the `tzdata` package][tzdata]. Refer to its docs\nfor more info.\n\n## Set a custom hostname!\n\nDuplicity checks the host name that it backs up and aborts the process if it detects a\nmismatch by default.\n\nDocker uses volatile host names, so you better add `--hostname` (and maybe also\n`--domainname`) when running this container to make profit of this feature, or add\n`--allow-source-mismatch` to `OPTIONS` environment variable. Otherwise, you will get\nerrors like:\n\n    Fatal Error: Backup source host has changed.\n    Current hostname: 414e54ed20fb\n    Previous hostname: 6529bba0969c\n\n    Aborting because you may have accidentally tried to backup two different\n    data sets to the same remote location, or using the same archive directory.\n    If this is not a mistake, use the --allow-source-mismatch switch to avoid\n    seeing this message\n\n## Pre and post scripts\n\nAdd jobs through environment variable pairs. The order will be followed.\n\n## Using Duplicity\n\nRefer to [Duplicity man page](https://duplicity.readthedocs.io/en/latest/), or execute:\n\n    docker run -it --rm ghcr.io/tecnativa/docker-duplicity duplicity --help\n\n### Shortcuts\n\nYou can use these bundled binaries to work faster:\n\n- `dup`: Executes duplicity prefixed with the options defined in `$OPTIONS` and\n  `$OPTIONS_EXTRA` (see above).\n- `backup`: Executes an immediate backup with default options.\n- `restore`: Restores immediately with default options. Most likely, you will need to\n  use it with `--force`.\n- `/etc/periodic/daily/jobrunner`: execute immediately all jobs scheduled for daily\n  backups. Change `daily` for other periodicity if you want to run those instead.\n\n## Testing your configuration\n\nIf you want to test how do your `daily` jobs work, just run:\n\n    docker exec -it your_backup_container /etc/periodic/daily/jobrunner\n\nReplace `daily` by any other periodicity to test it too.\n\n## Prebuilt flavors\n\nSometimes you need more than just copying a file here, pasting it there. That's why we\nsupply some special flavours of this image.\n\n### Normal (`docker-duplicity`)\n\nThis includes just the most basic packages to boot the cron and use Duplicity with any\nbackend. All other images are built on top of this one, so downloading several flavours\nwon't repeat the abse layers (disk-friendly!).\n\nIt's [preconfigured][dockerfile] to backup daily:\n\n```\n# Incremental backup of all files\nJOB_300_WHEN=daily\n```\n\n### PostgreSQL (`docker-duplicity-postgres`)\n\nIf you want to back up a PostgreSQL server, make sure you run this image in a fashion\nsimilar to this `docker-compose.yaml` definition:\n\n```yaml\nservices:\n  db:\n    image: postgres:9.6-alpine\n    environment:\n      POSTGRES_PASSWORD: mypass\n      POSTGRES_USER: myuser\n      POSTGRES_DB: mydb\n  backup:\n    image: ghcr.io/tecnativa/docker-duplicity-postgres\n    hostname: my.postgres.backup\n    environment:\n      # Postgres connection\n      PGHOST: db # This is the default\n      PGPASSWORD: mypass\n      PGUSER: myuser\n\n      # Additional configurations for Duplicity\n      AWS_ACCESS_KEY_ID: example amazon s3 access key\n      AWS_SECRET_ACCESS_KEY: example amazon s3 secret key\n      DST: boto3+s3://mybucket/myfolder\n      EMAIL_FROM: backup@example.com\n      EMAIL_TO: alerts@example.com\n      OPTIONS: --s3-european-buckets --s3-use-new-style\n      PASSPHRASE: example backkup encryption secret\n```\n\nIt will make [dumps automatically][dockerfile]:\n\n```\n# Makes postgres dumps for all databases except to templates and \"postgres\".\n# They are uploaded by JOB_300_WHEN\nJOB_200_WHEN=daily weekly\n```\n\n### Docker (`docker-duplicity-docker`)\n\nImagine you need to run some command in another container to generate a backup file\nbefore actually backing it up in a remote place.\n\nIf this is your case, you can use this version, which includes a prepackaged Docker\nclient.\n\nSee this `docker-compose.yaml` example, where we back up a Gitlab server using its\n[crappy official image][gitlab-ce]:\n\n```yaml\nservices:\n  gitlab:\n    image: gitlab/gitlab-ce\n    hostname: gitlab\n    domainname: example.com\n    environment:\n      GITLAB_OMNIBUS_CONFIG: |\n        # Your Gitlab configuration here\n    ports:\n      - \"22:22\"\n      - \"80:80\"\n      - \"443:443\"\n    volumes:\n      - config:/etc/gitlab:z\n      - data:/var/opt/gitlab:z\n      - logs:/var/log/gitlab:z\n  backup:\n    image: ghcr.io/tecnativa/docker-duplicity-docker\n    hostname: backup\n    domainname: gitlab.example.com\n    privileged: true # To speak with host's docker socket\n    volumes:\n      - config:/mnt/backup/src/config\n      - data:/mnt/backup/src/data\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n    environment:\n      # Generate Gitlab backup before uploading it\n      JOB_200_WHAT: docker exec projectname_gitlab_1 gitlab-rake gitlab:backup:create\n      JOB_200_WHEN: daily weekly\n\n      # Additional configurations for Duplicity\n      AWS_ACCESS_KEY_ID: example amazon s3 access key\n      AWS_SECRET_ACCESS_KEY: example amazon s3 secret key\n      DST: boto3+s3://mybucket/myfolder\n      EMAIL_FROM: backup@example.com\n      EMAIL_TO: alerts@example.com\n      OPTIONS: --s3-european-buckets --s3-use-new-style\n      PASSPHRASE: example backup encryption secret\n```\n\n### Amazon S3 (`*-s3`)\n\nAny of the other flavors has a special variant suffixed with `-s3`. It provides some\nopinionated defaults to make good use of S3 different storage types and its lifecycle\nrules and filters, assuming you want to have [weekly full backups][dockerfile]. You\nshould combine it with lifecycle and expiration rules at your will.\n\n```\n# Full backup of all files\nJOB_500_WHEN=weekly\n```\n\nNote, that for `DST` variable you should use `boto3+s3://bucket_name[/prefix]` style.\n\n### Multi (`*-multi`)\n\nAt the moment only \"postgres\" has this flavor. It extends from 'postgres-s3' and\nprovides some defaults to make good use of \"DST\\_{N}\" env. variables. and uses the extra\noptions according to destination.\n\nIn this mode the `$DST` is set to `multi`. This enables the use of `$DST_{N}` and\n`$DST_{N}_{ENV_VAR_NAME}`.\n\n`$DST_{N}_{ENV_VAR_NAME}` will be process as `${ENV_VAR_NAME}`.\n\nFor example:\n\n```yaml\n  backup:\n    ...\n    environment:\n      ...\n      DST_1: scp://uid@other.host//usr/backup\n      DST_2: boto3+s3://mybucket/myfolder\n      DST_2_AWS_ACCESS_KEY_ID: example amazon s3 access key\n      DST_2_AWS_SECRET_ACCESS_KEY: example amazon s3 secret key\n      DST_3: rsync://user@192.168.0.54:8022//volume1/folder/\n      DST_3_RSYNC_PASSWORD: the password to use with rsync\n```\n\nThe `restore` process uses the first destination defined.\n\n[alpine]: https://alpinelinux.org/\n[dockerfile]: https://github.com/Tecnativa/docker-duplicity/blob/master/Dockerfile\n[duplicity]: https://duplicity.gitlab.io\n[flavors]: #prebuilt-flavors\n[gitlab-ce]: https://hub.docker.com/r/gitlab/gitlab-ce/\n[mariadb]: https://mariadb.org/\n[odoobase]: https://hub.docker.com/r/tecnativa/odoo-base/builds/\n[options]: https://gitlab.com/duplicity/duplicity\n[postgresql]: https://www.postgresql.org/\n[tzdata]: https://pkgs.alpinelinux.org/package/edge/main/aarch64/tzdata\n\n## Development\n\nAll the dependencies you need to develop this project (apart from Docker itself) are\nmanaged with [poetry](https://python-poetry.org/).\n\nTo set up your development environment, run:\n\n```bash\npip install pipx  # If you don't have pipx installed\npipx install poetry  # Install poetry itself\npoetry install  # Install the python dependencies and setup the development environment\n```\n\n### Testing\n\nTo run the tests locally, add `--prebuild` to autobuild the image before testing:\n\n```sh\npoetry run pytest --prebuild\n```\n\nBy default, the image that the tests use (and optionally prebuild) is named\n`test:docker-duplicity`. If you prefer, you can build it separately before testing, and\nremove the `--prebuild` flag, to run the tests with that image you built:\n\n```sh\ndocker image build -t test:docker-duplicity .\npoetry run pytest\n```\n\nIf you want to use a different image, pass the `--image` command line argument with the\nname you want:\n\n```sh\n# To build it automatically\npoetry run pytest --prebuild --image my_custom_image\n\n# To prebuild it separately\ndocker image build -t my_custom_image .\npoetry run pytest --image my_custom_image\n```\n\n### Managing packages\n\nThe poetry project configuration (in the `pyproject.toml` file) includes a section which\ncontains the duplicity dependencies themselves. This allows us to manage those more\neasily and avoid future conflicts. Those are then exported into a `requirements.txt`\nfile in the docker image build phase.\n\nSo, if you need to add a new duplicity dependency to be used inside the container, the\ncorrect process would be:\n\n1. Add the dependency to the poetry project with:\n\n   ```bash\n   poetry add --optional MY_NEW_PACKAGE\n   ```\n\n   Note that it should be marked as an **optional** dependency, as it will not be used\n   in general development _outside_ the container.\n\n1. The new optional dependency should then be added to the duplicity list in the\n   `[tool.poetry.extras]` section of `pyproject.toml`\n\n   ```toml\n   [tool.poetry.extras]\n   duplicity = [\"b2\", \"b2sdk\", \"boto\", \"boto3\", \"gdata\", \"jottalib\", \"paramiko\", \"pexpect\", \"PyDrive\", \"pyrax\", \"python\", \"requests\", \"duplicity\", \"dropbox\", \"python\", \"mediafire\", \"MY_NEW_PACKAGE\"]\n   ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftecnativa%2Fdocker-duplicity","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftecnativa%2Fdocker-duplicity","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftecnativa%2Fdocker-duplicity/lists"}