{"id":39994312,"url":"https://github.com/pando85/containers","last_synced_at":"2026-05-03T00:01:35.819Z","repository":{"id":333383627,"uuid":"1136698818","full_name":"pando85/containers","owner":"pando85","description":"Collection of container images","archived":false,"fork":false,"pushed_at":"2026-04-10T11:55:04.000Z","size":2353,"stargazers_count":0,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-10T13:30:50.824Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pando85.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","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":"2026-01-18T07:07:52.000Z","updated_at":"2026-04-10T11:55:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pando85/containers","commit_stats":null,"previous_names":["pando85/containers"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/pando85/containers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pando85%2Fcontainers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pando85%2Fcontainers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pando85%2Fcontainers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pando85%2Fcontainers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pando85","download_url":"https://codeload.github.com/pando85/containers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pando85%2Fcontainers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31866357,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"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":[],"created_at":"2026-01-19T01:01:46.307Z","updated_at":"2026-04-16T01:01:17.848Z","avatar_url":"https://github.com/pando85.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n## Containers\n\n_An opinionated collection of container images_\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![GitHub Repo stars](https://img.shields.io/github/stars/pando85/containers?style=for-the-badge)\n![GitHub forks](https://img.shields.io/github/forks/pando85/containers?style=for-the-badge)\n![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/pando85/containers/release.yaml?style=for-the-badge\u0026label=Release)\n\n\u003c/div\u003e\n\nWelcome to our container images! If you are looking for a container, start by [browsing the GitHub Packages page for this repository's packages](https://github.com/orgs/pando85/packages?repo_name=containers).\n\n## Mission Statement\n\nOur goal is to provide [semantically versioned](https://semver.org/), [rootless](https://rootlesscontaine.rs/), and [multi-architecture](https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/) containers for various applications.\n\nWe adhere to the [KISS principle](https://en.wikipedia.org/wiki/KISS_principle), logging to stdout, maintaining [one process per container](https://testdriven.io/tips/59de3279-4a2d-4556-9cd0-b444249ed31e/), avoiding tools like [s6-overlay](https://github.com/just-containers/s6-overlay), and building all images on top of [Alpine](https://hub.docker.com/_/alpine) or [Ubuntu](https://hub.docker.com/_/ubuntu).\n\n## Features\n\n### Tag Immutability\n\nContainers built here do not use immutable tags in the traditional sense, as seen with [linuxserver.io](https://fleet.linuxserver.io/) or [Bitnami](https://bitnami.com/stacks/containers). Instead, we insist on pinning to the `sha256` digest of the image. While this approach is less visually appealing, it ensures functionality and immutability.\n\n| Container                                                | Immutable |\n| -------------------------------------------------------- | --------- |\n| `ghcr.io/pando85/home-assistant:rolling`                 | ❌        |\n| `ghcr.io/pando85/home-assistant:2025.5.1`                | ❌        |\n| `ghcr.io/pando85/home-assistant:rolling@sha256:8053...`  | ✅        |\n| `ghcr.io/pando85/home-assistant:2025.5.1@sha256:8053...` | ✅        |\n\n_If pinning an image to the `sha256` digest, tools like [Renovate](https://github.com/renovatebot/renovate) can update containers based on digest or version changes._\n\n### Rootless\n\nBy default the majority of our containers run as a non-root user (`65534:65534`), you are able to change the user/group by updating your configuration files.\n\n#### Docker Compose\n\n```yaml\nservices:\n  home-assistant:\n    image: ghcr.io/pando85/home-assistant:2025.5.1\n    container_name: home-assistant\n    user: 1000:1000 # The data volume permissions must match this user:group\n    read_only: true # May require mounting in additional dirs as tmpfs\n    tmpfs:\n      - /tmp:rw\n    # ...\n```\n\n#### Kubernetes\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: home-assistant\n# ...\nspec:\n  # ...\n  template:\n    # ...\n    spec:\n      containers:\n        - name: home-assistant\n          image: ghcr.io/pando85/home-assistant:2025.5.1\n          securityContext: # May require mounting in additional dirs as emptyDir\n            allowPrivilegeEscalation: false\n            capabilities:\n              drop:\n                - ALL\n            readOnlyRootFilesystem: true\n          volumeMounts:\n            - name: tmp\n              mountPath: /tmp\n      # ...\n      securityContext:\n        runAsUser: 1000\n        runAsGroup: 1000\n        fsGroup: 65534 # (Requires CSI support)\n        fsGroupChangePolicy: OnRootMismatch # (Requires CSI support)\n      volumes:\n        - name: tmp\n          emptyDir: {}\n      # ...\n# ...\n```\n\n### Passing Arguments to Applications\n\nSome applications only allow certain configurations via command-line arguments rather than environment variables. For such cases, refer to the Kubernetes documentation on [defining commands and arguments for a container](https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/). Then, specify the desired arguments as shown below:\n\n```yaml\nargs:\n  - --port\n  - \"8080\"\n```\n\n### Configuration Volume\n\nFor applications requiring persistent configuration data, the configuration volume is hardcoded to `/config` within the container. In most cases, this path cannot be changed.\n\n### Verify Image Signature\n\nThese container images are signed using the [attest-build-provenance](https://github.com/actions/attest-build-provenance) action.\n\nTo verify that the image was built by GitHub CI, use the following command:\n\n```sh\ngh attestation verify --repo pando85/containers oci://ghcr.io/pando85/${APP}:${TAG}\n```\n\nor by using [cosign](https://github.com/sigstore/cosign):\n\n```sh\ncosign verify-attestation --new-bundle-format --type slsaprovenance1 \\\n    --certificate-oidc-issuer \"https://token.actions.githubusercontent.com\" \\\n    --certificate-identity-regexp \"^https://github.com/pando85/containers/.github/workflows/app-builder.yaml@refs/heads/main\" \\\n    ghcr.io/pando85/${APP}:${TAG}\n```\n\n### Eschewed Features\n\nThis repository does not support multiple \"channels\" for the same application. For example:\n\n- **Prowlarr**, **Radarr**, **Lidarr**, and **Sonarr** only publish the **develop** branch, not the **master** (stable) branch.\n- **qBittorrent** is only published with **LibTorrent 2.x**. See [this issue](https://github.com/pando85/containers/issues/848) for more information.\n\nThis approach ensures consistency and focuses on streamlined builds.\n\n## Contributing\n\nWe encourage the use of official upstream container images whenever possible. However, contributing to this repository might make sense if:\n\n- The upstream application is **actively maintained**.\n- **And** one of the following applies:\n  - no official image exists.\n  - the official image does not support **multi-architecture builds**.\n  - the official image uses tools like **s6-overlay**, **gosu**, or other unconventional initialization mechanisms.\n  - does not tag releases.\n\n## Deprecations\n\nContainers in this repository may be deprecated for the following reasons:\n\n1. The upstream application is **no longer actively maintained**.\n2. An **official upstream container exists** that aligns with this repository's mission statement.\n3. The **maintenance burden** is unsustainable, such as frequent build failures or instability.\n\n**Note**: Deprecated containers will be announced with a release and remain available in the registry for 6 months before removal.\n\n## Maintaining a Fork\n\nForking this repository is straightforward. Keep the following in mind:\n\n1. **Renovate Bot**: Set up a GitHub Bot for Renovate by following the instructions [here](https://github.com/renovatebot/github-action).\n2. **Renovate Configuration**: Configuration files are located in the [`.github`](https://github.com/pando85/.github) and [renovate-config](https://github.com/pando85/renovate-config) repositories.\n3. **Lowercase Naming**: Ensure your GitHub username/organization and repository names are entirely lowercase to comply with GHCR requirements. Rename them or update workflows as needed.\n\n## Credits\n\nThis repository draws inspiration and ideas from the home-ops community, [hotio.dev](https://hotio.dev/), and [linuxserver.io](https://www.linuxserver.io/) contributors.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpando85%2Fcontainers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpando85%2Fcontainers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpando85%2Fcontainers/lists"}