{"id":17002899,"url":"https://github.com/minchinweb/docker-base","last_synced_at":"2026-02-02T05:01:14.535Z","repository":{"id":40477272,"uuid":"179693008","full_name":"minchinweb/docker-base","owner":"minchinweb","description":"Personal base docker image","archived":false,"fork":false,"pushed_at":"2025-10-31T02:30:54.000Z","size":40,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-31T04:23:44.450Z","etag":null,"topics":["docker-image"],"latest_commit_sha":null,"homepage":null,"language":"Shell","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/minchinweb.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":"2019-04-05T14:04:38.000Z","updated_at":"2025-10-31T02:30:48.000Z","dependencies_parsed_at":"2025-04-12T06:30:47.486Z","dependency_job_id":"3b2e9520-23cd-4889-a408-1236468b63c5","html_url":"https://github.com/minchinweb/docker-base","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/minchinweb/docker-base","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minchinweb%2Fdocker-base","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minchinweb%2Fdocker-base/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minchinweb%2Fdocker-base/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minchinweb%2Fdocker-base/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/minchinweb","download_url":"https://codeload.github.com/minchinweb/docker-base/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minchinweb%2Fdocker-base/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29006081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-02T04:25:24.522Z","status":"ssl_error","status_checked_at":"2026-02-02T04:24:51.069Z","response_time":58,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["docker-image"],"created_at":"2024-10-14T04:29:18.773Z","updated_at":"2026-02-02T05:01:14.530Z","avatar_url":"https://github.com/minchinweb.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Personal Base Container\n\nThis is my personal base container for Docker. It provides a basic Ubuntu 22.04\n(aka \"Jammy\") or 24.04 (aka \"Nobel\") image. Maybe you'll find it helpful too...\n\n[![Create and publish a Docker image](https://github.com/minchinweb/docker-base/actions/workflows/deploy-image.yml/badge.svg)](https://github.com/minchinweb/docker-base/actions/workflows/deploy-image.yml)\n[![GitHub issues](https://img.shields.io/github/issues-raw/minchinweb/docker-base.svg?style=popout)](https://github.com/MinchinWeb/docker-base/issues)\n\u003c!--\n[![Docker Pulls](https://img.shields.io/docker/pulls/minchinweb/base.svg?style=popout)](https://hub.docker.com/r/minchinweb/base)\n![Docker Image Version](https://img.shields.io/docker/v/minchinweb/base?sort=date)\n![Size \u0026 Layers](https://img.shields.io/docker/image-size/minchinweb/base?sort=semver)\n--\u003e\n\n## How to Use This\n\nThe container will probably not be used directly, but rather as a for building\nother (Docker) containers on. To do that, specify this as your base image (in\nyour `Dockerfile`):\n\n    FROM ghcr.io/minchinweb/base:noble\n\n    # ... and the rest\n\nYou also probably want to set the UID and GID (*User ID* number and *Group ID*\nnumber). This can be done through the environmental variables `PUID` and `GUID`\n(either the `-e` option at the command line, or the `environment` key in your\n*docker-compose.yaml* file).\n\nThere is also a folders at `/app`, `/config`, `/defaults` that are owned by the\nuser. The idea is to have your application use this `/config` volume for all\nits persist-able data, and do this by mounting this as a volume outside of your\ncontainer (either the `-v` option at the command line, or the `volumes` key in\nyour *docker-compose.yaml* file).\n\n## Why I Created This\n\nor, *What Problems is This Trying to Solve?*\n\nDocker works it's magic by isolating processes, rather than spinning up a whole\nnew virtual machine. This is great for hardware requirements (especially as you\nadd more and more containers), but one of the byproducts is that certain\naspects of the processes run within the containers filter out into the host\noperating system, in particular the user (and group) that a process is run by\n*inside* the container **is the same user** (and group) that is running the\nprocess *outside* the container, on the host system. Further more, this user is\nnot identified by a name, but rather a number. The naïve approach is just to\nrun everything as `root` (user id 1) because the user id is constant across\nsystems; however it's strength (that `root` has access to (pretty much)\neverything) is also a great weakness (that it can stomp all over your system,\nincluding changing or deleting pretty much any file on your system). Running\nyour containers as `root` also is the antithesis to much of Linux security\nmodel, which requires processes to run as users with only the permissions they\nneed, and no extras. Thus, a better model is to create `docker` user on your\nhost system (name it whatever you want) that can only edit the docker volumes\non your host system, and map that user id (and group id) to the user running\nthe process within your container, and give that user (within the container)\nwhatever permissions it may need. Within the container, this user is named\n`abc` and belongs to the `abc` group.\n\nAs another bonus, Docker will cache layers (the parts a container is built up\nof), and so by using a constant base image on in my Docker setup, it saves on\nspace.\n\n## Personal Additions and Notes\n\n- add various tags as per [label-schema.org](http://label-schema.org/rc1/)\n- added Canadian English locale, and sets the language to this\n- init script is found at `/s6-init`. Turns out naming the process `init`\n  [causes weird Docker\n  bugs](https://github.com/just-containers/s6-overlay/issues/158)\n- when built \u003cdel\u003eon Docker Hub\u003c/del\u003e via GitHub Actions and published to the\n  GitHub Container Registry, is tagged with \"latest\", the Ubuntu codename (e.g.\n  \"noble\"), and the Git commit ID (a random-ish string of numbers and letters)\n\n## Prior Art\n\nThis is based on LinuxServer.io's [base\ncontainer](https://github.com/linuxserver/docker-baseimage-ubuntu). This is\nwhere I first became aware of the user id problem and this solution, and also\nthe idea of a constant `/config` volume for all containers. However,\nLinuxServer.io only has a certain selection of containers that they maintain,\nand I wanted to apply this set up to other containers. By the time I'd figured\nout how the system working, I'd basically rebuilt their base container.\n\n- what LinuxServer.io says about [PUID and\n  GUID](https://www.linuxserver.io/docs/puid-pgid)\n- what LinuxServer.io says about [container\n  volumes](https://www.linuxserver.io/docs/persisting-data)\n\nAlpine Linux is often used as a base for container, owing to its small size\n(quoted at ~5MB). However, I figure the trade off of being able to use Ubuntu\nunder the hood, and not being required to learn yet another variant of Linux,\nis worth slightly larger size (this image comes in at ~44MB).\n\n[s6-overlay](https://github.com/just-containers/s6-overlay/) is a project used\nby LinuxServer.io, and so used here too, to deal with containers that launch\nmultiple processes. The s6 system is used to run the scripts that fix the user\nid problem.\n\n## Known Issues\n\n- For whatever reason, I couldn't get this image to build locally and work.\n  However, it works when built on Docker Cloud/Docker Hub.\n- `/init` still exists, but don't use it. Use `/s6-init` instead (see\n  [here](https://github.com/just-containers/s6-overlay/issues/158))\n- I've had some issues getting services under the init system to work. I\n  haven't gotten it solved yet, so I'm not sure whether the issue is something\n  with it, or something with my code...\n- this image doesn't automatically rebuild when the upstream image changes, but\n  I have set up GitHub Actions to rebuild this image every week to approximate\n  that automation.\n- if you use this as a base image, you may need to set `ENV S6_KEEP_ENV=1` in\n  your `Dockerfile` if you want your default script to have access to your\n  environmental variables.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminchinweb%2Fdocker-base","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fminchinweb%2Fdocker-base","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminchinweb%2Fdocker-base/lists"}