{"id":16738578,"url":"https://github.com/airhorns/docker-python-node","last_synced_at":"2026-05-05T15:32:44.016Z","repository":{"id":136626092,"uuid":"148698711","full_name":"airhorns/docker-python-node","owner":"airhorns","description":":whale: Handy Docker containers with python and node installed securely to use as base images for your application.","archived":false,"fork":false,"pushed_at":"2018-09-15T21:39:58.000Z","size":78,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-22T11:16:00.012Z","etag":null,"topics":["alpine","containers","debian","docker","node","python"],"latest_commit_sha":null,"homepage":"https://hub.docker.com/r/airhorns/python-node/","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/airhorns.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2018-09-13T21:12:20.000Z","updated_at":"2018-09-15T21:39:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"bb6833c0-61c5-4b03-9b17-602a449aa050","html_url":"https://github.com/airhorns/docker-python-node","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fdocker-python-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fdocker-python-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fdocker-python-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/airhorns%2Fdocker-python-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/airhorns","download_url":"https://codeload.github.com/airhorns/docker-python-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243797516,"owners_count":20349413,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["alpine","containers","debian","docker","node","python"],"created_at":"2024-10-13T00:31:39.087Z","updated_at":"2026-05-05T15:32:38.994Z","avatar_url":"https://github.com/airhorns.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!---\nWarning! This file is autogenerated by generate.py. To modify it, you must modify the template (Readme.md.jinja2)\nand then rerun generate.py. See below for more details. Weird, I know, but its the easiest way to keep this sucker\nup to date!\n---\u003e\n\n# docker-python-node [![CircleCI](https://circleci.com/gh/airhorns/docker-python-node.svg?style=svg)](https://circleci.com/gh/airhorns/docker-python-node)\n\nHandy Docker containers with python and node installed securely to use as base Docker images for your application. 🐳✅\n\n# How to Use\n\nSelect a Python version, select a Node version, and select an OS that suits your needs, and then pick the tag that includes those. Or, if you want to use the latest, just use `latest` in the place of the version string. When picking your version, you can be specific and use `3.7.0`, or use a major/minor like `3.7`, or just use the major version like `3.` See the exhaustive list of available tags below.\n\nFor example, to get Python 3.6.x and Node 8.x.x on Debian Stretch, use the tag `3.6-8-stretch` like so:\n\n```\n$ docker run airhorns/python-node:3.6-8-stretch python --version\nPython 3.6.6\n$ docker run airhorns/python-node:3.6-8-stretch node --version\nv8.9.1\n```\n\nTo use the latest Node version but fix your python version, use the `latest` version string like so:\n\n```\n$ docker run airhorns/python-node:3.6-8-stretch python --version\nPython 3.6.6\n$ docker run airhorns/python-node:3.6-8-stretch node --version\nv10.10.0\n```\n\nTo use the latest of all the stuff and the default OS, just use the `latest` tag:\n\n```\n$ docker run airhorns/python-node:latest python --version\nPython 3.7.0\n$ docker run airhorns/python-node:latest node --version\nv10.10.0\n```\n\nTags are always structured like so: `\u003cpython_version\u003e-\u003cnode_version\u003e-\u003cos\u003e`.\n\n### Available Software Versions\n\n#### Python:\n- 3.7.0, aliased as `latest`, `3`, `3.7`\n- 3.6.6, aliased as `3.6`\n- 3.5.6, aliased as `3.5`\n- 2.7.15, aliased as `2`, `2.7`\n\n\n#### Node:\n- 10.10.0, aliased as `latest`, `10`\n- 8.12.0, aliased as `8`\n- 6.14.4, aliased as `6`\n\n\n# Available OSes\n\n - `stretch` - Debian Stretch, from `python:3-stretch` for example. Good default.\n - `slim-stretch` - Slim Debian Stretch, from `python:3-slim` for example. Missing lots of things you might be used to having like curl etc, but much smaller.\n - `alpine3.8` - Alpine Linux, from `python:3-alpine` for example. Results in very small containers, but has just about nothing other than what it needs to run pythion and node. Can also have a [big performance hit](https://superuser.com/questions/1219609/why-is-the-alpine-docker-image-over-50-slower-than-the-ubuntu-image/1234279) depending on the usage patterns.\n\n# All Available Tags\n\nThe currently built tags are:\n\n- __`3.7.0-10.10.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-10.10.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-10.10.0-stretch) aliases: `latest-latest-stretch`, `latest-latest`, `latest-10-stretch`, `latest-10`, `3-latest-stretch`, `3-latest`, `3-10-stretch`, `3-10`, `3.7-latest-stretch`, `3.7-latest`, `3.7-10-stretch`, `3.7-10`, `latest`\n- __`3.7.0-8.12.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-8.12.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-8.12.0-stretch) aliases: `latest-8-stretch`, `latest-8`, `3-8-stretch`, `3-8`, `3.7-8-stretch`, `3.7-8`\n- __`3.7.0-6.14.4-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-6.14.4-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-6.14.4-stretch) aliases: `latest-6-stretch`, `latest-6`, `3-6-stretch`, `3-6`, `3.7-6-stretch`, `3.7-6`\n- __`3.6.6-10.10.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-10.10.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-10.10.0-stretch) aliases: `3.6-latest-stretch`, `3.6-latest`, `3.6-10-stretch`, `3.6-10`\n- __`3.6.6-8.12.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-8.12.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-8.12.0-stretch) aliases: `3.6-8-stretch`, `3.6-8`\n- __`3.6.6-6.14.4-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-6.14.4-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-6.14.4-stretch) aliases: `3.6-6-stretch`, `3.6-6`\n- __`3.5.6-10.10.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-10.10.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-10.10.0-stretch) aliases: `3.5-latest-stretch`, `3.5-latest`, `3.5-10-stretch`, `3.5-10`\n- __`3.5.6-8.12.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-8.12.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-8.12.0-stretch) aliases: `3.5-8-stretch`, `3.5-8`\n- __`3.5.6-6.14.4-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-6.14.4-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-6.14.4-stretch) aliases: `3.5-6-stretch`, `3.5-6`\n- __`2.7.15-10.10.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-10.10.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-10.10.0-stretch) aliases: `2-latest-stretch`, `2-latest`, `2-10-stretch`, `2-10`, `2.7-latest-stretch`, `2.7-latest`, `2.7-10-stretch`, `2.7-10`\n- __`2.7.15-8.12.0-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-8.12.0-stretch.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-8.12.0-stretch) aliases: `2-8-stretch`, `2-8`, `2.7-8-stretch`, `2.7-8`\n- __`2.7.15-6.14.4-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-6.14.4-stretch.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-6.14.4-stretch) aliases: `2-6-stretch`, `2-6`, `2.7-6-stretch`, `2.7-6`\n- __`3.7.0-10.10.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-10.10.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-10.10.0-slim-stretch) aliases: `latest-latest-slim-stretch`, `latest-10-slim-stretch`, `3-latest-slim-stretch`, `3-10-slim-stretch`, `3.7-latest-slim-stretch`, `3.7-10-slim-stretch`\n- __`3.7.0-8.12.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-8.12.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-8.12.0-slim-stretch) aliases: `latest-8-slim-stretch`, `3-8-slim-stretch`, `3.7-8-slim-stretch`\n- __`3.7.0-6.14.4-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-6.14.4-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-6.14.4-slim-stretch) aliases: `latest-6-slim-stretch`, `3-6-slim-stretch`, `3.7-6-slim-stretch`\n- __`3.6.6-10.10.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-10.10.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-10.10.0-slim-stretch) aliases: `3.6-latest-slim-stretch`, `3.6-10-slim-stretch`\n- __`3.6.6-8.12.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-8.12.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-8.12.0-slim-stretch) aliases: `3.6-8-slim-stretch`\n- __`3.6.6-6.14.4-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-6.14.4-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-6.14.4-slim-stretch) aliases: `3.6-6-slim-stretch`\n- __`3.5.6-10.10.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-10.10.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-10.10.0-slim-stretch) aliases: `3.5-latest-slim-stretch`, `3.5-10-slim-stretch`\n- __`3.5.6-8.12.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-8.12.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-8.12.0-slim-stretch) aliases: `3.5-8-slim-stretch`\n- __`3.5.6-6.14.4-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-6.14.4-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-6.14.4-slim-stretch) aliases: `3.5-6-slim-stretch`\n- __`2.7.15-10.10.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-10.10.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-10.10.0-slim-stretch) aliases: `2-latest-slim-stretch`, `2-10-slim-stretch`, `2.7-latest-slim-stretch`, `2.7-10-slim-stretch`\n- __`2.7.15-8.12.0-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-8.12.0-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-8.12.0-slim-stretch) aliases: `2-8-slim-stretch`, `2.7-8-slim-stretch`\n- __`2.7.15-6.14.4-slim-stretch`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-6.14.4-slim-stretch.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-6.14.4-slim-stretch) aliases: `2-6-slim-stretch`, `2.7-6-slim-stretch`\n- __`3.7.0-10.10.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-10.10.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-10.10.0-alpine3.8) aliases: `latest-latest-alpine`, `latest-latest-alpine3.8`, `latest-10-alpine`, `latest-10-alpine3.8`, `3-latest-alpine`, `3-latest-alpine3.8`, `3-10-alpine`, `3-10-alpine3.8`, `3.7-latest-alpine`, `3.7-latest-alpine3.8`, `3.7-10-alpine`, `3.7-10-alpine3.8`\n- __`3.7.0-8.12.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-8.12.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-8.12.0-alpine3.8) aliases: `latest-8-alpine`, `latest-8-alpine3.8`, `3-8-alpine`, `3-8-alpine3.8`, `3.7-8-alpine`, `3.7-8-alpine3.8`\n- __`3.7.0-6.14.4-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.7.0-6.14.4-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.7.0-6.14.4-alpine3.8) aliases: `latest-6-alpine`, `latest-6-alpine3.8`, `3-6-alpine`, `3-6-alpine3.8`, `3.7-6-alpine`, `3.7-6-alpine3.8`\n- __`3.6.6-10.10.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-10.10.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-10.10.0-alpine3.8) aliases: `3.6-latest-alpine`, `3.6-latest-alpine3.8`, `3.6-10-alpine`, `3.6-10-alpine3.8`\n- __`3.6.6-8.12.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-8.12.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-8.12.0-alpine3.8) aliases: `3.6-8-alpine`, `3.6-8-alpine3.8`\n- __`3.6.6-6.14.4-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.6.6-6.14.4-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.6.6-6.14.4-alpine3.8) aliases: `3.6-6-alpine`, `3.6-6-alpine3.8`\n- __`3.5.6-10.10.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-10.10.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-10.10.0-alpine3.8) aliases: `3.5-latest-alpine`, `3.5-latest-alpine3.8`, `3.5-10-alpine`, `3.5-10-alpine3.8`\n- __`3.5.6-8.12.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-8.12.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-8.12.0-alpine3.8) aliases: `3.5-8-alpine`, `3.5-8-alpine3.8`\n- __`3.5.6-6.14.4-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:3.5.6-6.14.4-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:3.5.6-6.14.4-alpine3.8) aliases: `3.5-6-alpine`, `3.5-6-alpine3.8`\n- __`2.7.15-10.10.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-10.10.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-10.10.0-alpine3.8) aliases: `2-latest-alpine`, `2-latest-alpine3.8`, `2-10-alpine`, `2-10-alpine3.8`, `2.7-latest-alpine`, `2.7-latest-alpine3.8`, `2.7-10-alpine`, `2.7-10-alpine3.8`\n- __`2.7.15-8.12.0-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-8.12.0-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-8.12.0-alpine3.8) aliases: `2-8-alpine`, `2-8-alpine3.8`, `2.7-8-alpine`, `2.7-8-alpine3.8`\n- __`2.7.15-6.14.4-alpine3.8`__: [![](https://images.microbadger.com/badges/image/airhorns/python-node:2.7.15-6.14.4-alpine3.8.svg)](https://microbadger.com/images/airhorns/python-node:2.7.15-6.14.4-alpine3.8) aliases: `2-6-alpine`, `2-6-alpine3.8`, `2.7-6-alpine`, `2.7-6-alpine3.8`\nSee the complete list at https://hub.docker.com/r/airhorns/python-node/tags/.\n\n# Usage\n\nPython and Node are installed to the system-wide default location, are on the path, and aren't wrapped by any version managers like `pyenv` or `nvm`. So, you should just be able to invoke `python` or `node` in your dockerfiles or applications and it will just work!\n\n# Contributing\n\nRun `pipenv install` to install the Python dependencies for this project.\n\nThis repo is a big folder of Dockerfiles and a build configuration to actually build containers. The containers are built on CircleCI.\n\nThe actual Dockerfiles \u0026 Circle config is generated by `generate.py` from `config.yml`. To change or add a new version of one of the softwares, add it to `config.yml`, run `generate.py`, and you should find an updated set of Dockerfiles, CircleCI build config, and Readme reporting all the new stuff you've added.\n\nTo modify the structure of any of the generated files, examine the Jinja2 templates in the `templates` directory.\n\nThis repo is super inspired by https://github.com/starefossen/docker-ruby-node , thanks to Hans for the idea!\n\n# License\n\nMIT","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairhorns%2Fdocker-python-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fairhorns%2Fdocker-python-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fairhorns%2Fdocker-python-node/lists"}