{"id":18929410,"url":"https://github.com/thecodingmachine/docker-images-nodejs","last_synced_at":"2025-07-26T20:38:26.115Z","repository":{"id":41407086,"uuid":"138001217","full_name":"thecodingmachine/docker-images-nodejs","owner":"thecodingmachine","description":" A set of Node.js Docker images","archived":false,"fork":false,"pushed_at":"2025-03-25T20:21:08.000Z","size":78,"stargazers_count":10,"open_issues_count":5,"forks_count":8,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-11T18:59:46.965Z","etag":null,"topics":["docker","nodejs"],"latest_commit_sha":null,"homepage":"","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/thecodingmachine.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}},"created_at":"2018-06-20T08:14:53.000Z","updated_at":"2025-03-25T20:21:12.000Z","dependencies_parsed_at":"2024-10-27T23:07:10.389Z","dependency_job_id":"c5bcf552-efbb-4565-9d7f-f2a313a22e15","html_url":"https://github.com/thecodingmachine/docker-images-nodejs","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/thecodingmachine%2Fdocker-images-nodejs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodingmachine%2Fdocker-images-nodejs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodingmachine%2Fdocker-images-nodejs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thecodingmachine%2Fdocker-images-nodejs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thecodingmachine","download_url":"https://codeload.github.com/thecodingmachine/docker-images-nodejs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249097807,"owners_count":21212356,"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":["docker","nodejs"],"created_at":"2024-11-08T11:32:28.109Z","updated_at":"2025-04-15T15:30:55.550Z","avatar_url":"https://github.com/thecodingmachine.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/thecodingmachine/docker-images-nodejs.svg?branch=master)](https://travis-ci.org/thecodingmachine/docker-images-nodejs)\n\n# General purpose NodeJS images for Docker\n\nThis repository contains a set of **fat**, developer-friendly, general purpose NodeJS images for Docker.\n     \n - 2 variants available: `standalone` and `apache` (for serving an SPA without NodeJS server as backend)\n - For each variant, you can select the `build` sub-variant that contains essential build tools (make, gcc, etc.) that can be needed to compile native extensions\n - Images are bundled with cron. Cron jobs can be configured using environment variables\n - Everything is done to limit file permission issues that often arise when using Docker. The image is actively tested on Linux, Windows and MacOS\n - Base image is Debian Bullseye (with more variants to come)\n\n## Images\n\n| Name                                                                                                                                                                                                                                                                                                                                        | NodeJs version | variant    | build tools | base distro     |\n|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------|------------|-------------|-----------------|\n| [thecodingmachine/nodejs:v2-14-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-14-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-bullseye)                                                     | `14.x`         | standalone | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-16-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-16-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-bullseye)                                                     | `16.x`         | standalone | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-18-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-18-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-bullseye)                                                     | `18.x`         | standalone | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-20-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-20-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-bullseye)                                                     | `20.x`         | standalone | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-22-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-22-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-bullseye)                                                     | `22.x`         | standalone | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-14-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-14-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-bullseye-build)                             | `14.x`         | standalone | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-16-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-16-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-bullseye-build)                             | `16.x`         | standalone | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-18-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-18-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-bullseye-build)                             | `18.x`         | standalone | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-20-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-20-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-bullseye-build)                             | `20.x`         | standalone | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-22-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-22-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-bullseye-build)                             | `22.x`         | standalone | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-14-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-apache-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-14-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-apache-bullseye)                         | `14.x`         | apache     | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-16-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-apache-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-16-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-apache-bullseye)                         | `16.x`         | apache     | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-18-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-apache-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-18-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-apache-bullseye)                         | `18.x`         | apache     | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-20-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-apache-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-20-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-apache-bullseye)                         | `20.x`         | apache     | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-22-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-apache-bullseye)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-22-apache-bullseye](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-apache-bullseye)                         | `22.x`         | apache     | No          | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-14-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-apache-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-14-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.14-apache-bullseye-build) | `14.x`         | apache     | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-16-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-apache-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-16-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.16-apache-bullseye-build) | `16.x`         | apache     | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-18-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-apache-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-18-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.18-apache-bullseye-build) | `18.x`         | apache     | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-20-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-apache-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-20-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.20-apache-bullseye-build) | `20.x`         | apache     | Yes         | Debian Bullseye |\n| [thecodingmachine/nodejs:v2-22-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-apache-bullseye-build)\u003cbr/\u003e[ghcr.io/thecodingmachine/nodejs:v2-22-apache-bullseye-build](https://github.com/thecodingmachine/docker-images-nodejs/blob/master/Dockerfile.22-apache-bullseye-build) | `22.x`         | apache     | Yes         | Debian Bullseye |\n\nNote: we do not tag minor releases of NodeJS, only major versions. You will find for example an image for NodeJS 18.x, but no tagged image for NodeJS 18.2. \nThis is because NodeJS follows SemVer and we believe you have no valid reason to ask explicitly for 18.2. \nWhen 18.3 is out, you certainly want to upgrade automatically to this minor release since it is backward compatible.\n\nImages are automatically updated when a new patch version of NodeJS is released, so the NodeJS 18.x image will always contain \nthe most up-to-date version of the NodeJS 18.x branch.\n\n## Usage\n\nExample with standalone:\n\n```bash\n$ docker run -it --rm --name my-running-script -v \"$PWD\":/usr/src/app thecodingmachine/nodejs:v2-18-bullseye node your-script.js\n```\n\nExample with Apache:\n\n```bash\n$ docker run -p 80:80 --name my-apache-app -v \"$PWD\":/var/www/html thecodingmachine/nodejs:v2-18-apache-bullseye\n```\n\nExample with Apache + Node 18.x in a Dockerfile:\n\n**Dockerfile**\n```Dockerfile\nFROM thecodingmachine/nodejs:v2-18-apache-bullseye\n\nCOPY src/ /var/www/html/\nRUN yarn install\nRUN yarn run buld\n```\n\n## Default working directory\n\nThe working directory (the directory in which you should mount/copy your application) depends on the image variant\nyou are using:\n\n| Variant    | Working directory |\n|------------|-------------------|\n| standalone | `/usr/src/app`    |\n| apache     | `/var/www/html`   |\n\n\n## Changing Apache document root\n\nFor the *apache* variant, you can change the document root of Apache (i.e. your \"public\" directory) by using the \n`APACHE_DOCUMENT_ROOT` variable:\n\n```\n# The root of your website is in the \"public\" directory:\nAPACHE_DOCUMENT_ROOT=public/\n```\n\n## Enabling/disabling Apache extensions\n\nYou can enable/disable Apache extensions using the `APACHE_EXTENSION_[extension_name]` environment variable.\n\nFor instance:\n\n```yml\nversion: '3'\nservices:\n  my_app:\n    image: thecodingmachine/nodejs:v2-18-apache-bullseye\n    environment:\n      # Enable the DAV extension for Apache\n      APACHE_EXTENSION_DAV: 1\n      # Enable the SSL extension for Apache\n      APACHE_EXTENSION_SSL: 1\n```\n\nAs an alternative, you can use the `APACHE_EXTENSIONS` global variable:\n\n```\nAPACHE_EXTENSIONS=\"dav ssl\"\n```\n\n**Apache modules enabled by default:** access_compat, alias, auth_basic, authn_core, authn_file, authz_core, authz_host, authz_user, autoindex, deflate, dir, env, expires, filter, mime, mpm_prefork, negotiation, reqtimeout, rewrite, setenvif, status\n\n**Apache modules available:** access_compat, actions, alias, allowmethods, asis, auth_basic, auth_digest, auth_form, authn_anon, authn_core, authn_dbd, authn_dbm, authn_file, authn_socache, authnz_fcgi, authnz_ldap, authz_core, authz_dbd, authz_dbm, authz_groupfile, authz_host, authz_owner, authz_user, autoindex, buffer, cache, cache_disk, cache_socache, cgi, cgid, charset_lite, data, dav, dav_fs, dav_lock, dbd, deflate, dialup, dir, dump_io, echo, env, ext_filter, file_cache, filter, headers, heartbeat, heartmonitor, ident, include, info, lbmethod_bybusyness, lbmethod_byrequests, lbmethod_bytraffic, lbmethod_heartbeat, ldap, log_debug, log_forensic, lua, macro, mime, mime_magic, mpm_event, mpm_prefork, mpm_worker, negotiation, proxy, proxy_ajp, proxy_balancer, proxy_connect, proxy_express, proxy_fcgi, proxy_fdpass, proxy_ftp, proxy_html, proxy_http, proxy_scgi, proxy_wstunnel, ratelimit, reflector, remoteip, reqtimeout, request, rewrite, sed, session, session_cookie, session_crypto, session_dbd, setenvif, slotmem_plain, slotmem_shm, socache_dbm, socache_memcache, socache_shmcb, speling, ssl, status, substitute, suexec, unique_id, userdir, usertrack, vhost_alias, xml2enc\n\n## Permissions\n\nEver faced file permission issues with Docker? Good news, this is a thing of the past!\n\nIf you are used to running Docker containers with the base NodeJS image, you probably noticed that when running commands\n(like `yarn install`) within the container, files are associated to the `root` user. This is because the base user\nof the image is \"root\".\n\nWhen you mount your project directory into `/var/www/html` or `/usr/src/app`, it would be great if the default user used by Docker could\nbe your current host user.\n\nThe problem with Docker is that the container and the host do not share the same list of users. For instance, you might\nbe logged in on your host computer as `superdev` (ID: 1000), and the container has no user whose ID is 1000.\n\nThe *thecodingmachine/nodejs* images solve this issue with a bit of black magic:\n\nThe image contains a user named `docker`. On container startup, the startup script will look at the owner of the \nworking directory (`/var/www/html` for Apache, or `/usr/src/app` for standalone). The script will then assume that\nyou want to run commands as this user. So it will **dynamically change the ID of the docker user** to match the ID of\nthe current working directory user.\n\nFurthermore, the image is changing the Apache default user/group to be `docker/docker` (instead if `www-data/www-data`).\nSo Apache will run with the same rights as the user on your host.\n\nThe direct result is that, in development:\n\n - Your NodeJS application can edit any file\n - Your container can edit any file\n - You can still edit any file created by Apache or by the container in CLI\n\n\n## Setting up CRON jobs\n\nYou can set up CRON jobs using environment variables too.\n\nTo do this, you need to configure 3 variables:\n\n```bash\n# configure the user that will run cron (defaults to root)\nCRON_USER=root\n# configure the schedule for the cron job (here: run every minute)\nCRON_SCHEDULE=* * * * * * *\n# last but not least, configure the command\nCRON_COMMAND=yarn run stuff\n```\n\nBy default, CRON output will be redirected to Docker output.\n\nIf you have more than one job to run, you can suffix your environment variable with the same string. For instance:\n\n```bash\nCRON_USER_1=root\nCRON_SCHEDULE_1=* * * * * * *\nCRON_COMMAND_1=yarn run stuff\n\nCRON_USER_2=www-data\nCRON_SCHEDULE_2=* * * * * * *\nCRON_COMMAND_2=yarn run other-stuff\n```\n\n**Important**: The cron runner we use is [Supercronic](https://github.com/aptible/supercronic) and not the orginial \"cron\" that has a number of issues with containers. \nEven with Supercronic, the architecture of cron was never designed with Docker in mind (Cron is way older than Docker). It will run correctly on\nyour container. If at some point you want to scale and add more containers, it will run on all your containers.\nAt that point, if you only want to run a Cron task once for your application (and not once per container), you might\nwant to have a look at alternative solutions like [Tasker](https://github.com/opsxcq/tasker) or one of the many\nother alternatives.\n\n## Launching commands on container startup\n\nYou can launch commands on container startup using the `STARTUP_COMMAND_XXX` environment variables.\nThis can be very helpful to install dependencies or apply database patches for instance:\n\n```bash\nSTARTUP_COMMAND_1=yarn install\nSTARTUP_COMMAND_2=yarn run watch \u0026\n```\n\nAs an alternative, the images will look into the container for an executable file named `/etc/container/startup.sh`.\n\nIf such a file is mounted in the image, it will be executed on container startup.\n\n```bash\ndocker run -it --rm --name my-running-script -v \"$PWD\":/usr/src/myapp -w /usr/src/myapp \\ \n       -v $PWD/my-startup-script.sh:/etc/container/startup.sh thecodingmachine/nodejs:v2-18-bullseye node your-script.js \n```\n\n## Registering SSH private keys\n\nIf your NodeJS project as a dependency on [a package stored in a private GIT repository](https://getcomposer.org/doc/05-repositories.md#using-private-repositories), \nyour `yarn install` commands will not work unless you register your private key in the container.\n\nYou have several options to do this.\n\n### Option 1: mount your keys in the container directly\n\nThis option is the easiest way to go if you are using the image on a development environment.\n\n**docker-compose.yml**\n```yml\nversion: '3'\nservices:\n  my_app:\n    image: thecodingmachine/nodejs:v2-18-bullseye\n    volumes:\n      - ~/.ssh:/home/docker/.ssh\n```\n\n### Option 2: store the keys from environment variables or build arguments\n\nLook at this option if you are building a Dockerfile from this image.\n\nThe first thing to do is to get the signature of the server you want to connect to.\n\n``` bash\n$ ssh-keyscan myserver.com\n```\n\nCopy the output and put it in an environment variable. We assume the content is stored in `$SSH_KNOWN_HOSTS`.\n\nNow, let's write a Dockerfile.\n\n**Dockerfile**\n```yml\nFROM thecodingmachine/nodejs:node1°\n\nARG SSH_PRIVATE_KEY\nARG SSH_KNOWN_HOSTS\n\n# Let's register the private key\nRUN ssh-add \u003c(echo \"$SSH_PRIVATE_KEY\")\n# Let's add the server to the list of known hosts.\nRUN echo \"$SSH_KNOWN_HOSTS\" \u003e\u003e ~/.ssh/known_hosts\n```\n\nFinally, when triggering the build, you must pass the 2 variables as [build arguments](https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg):\n\n```bash\n$ docker build -t my_image --build-arg SSH_PRIVATE_KEY=\"$SSH_PRIVATE_KEY\" --build-arg SSH_KNOWN_HOSTS=\"$SSH_KNOWN_HOSTS\" .\n```\n\n## Usage in Kubernetes\n\nIf you plan to use this image in Kubernetes, please be aware that the image internally uses `sudo`. This is because the\ndefault user (`docker`) needs to be able to edit NodeJS config files as `root`.\n\nKubernetes has a security setting (`allowPrivilegeEscalation`) that can disallow the use of `sudo`. The use of this flag\nbreaks the image and in the logs, you will find the message:\n\n```\nsudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?\n```\n\nPlease be sure that this option is never set to false:\n\n```yml\napiVersion: v1\nkind: Pod\n# ...\nspec:\n  containers:\n  - name: foobar\n    image: thecodingmachine/nodejs:v2-18-bullseye\n    securityContext:\n      allowPrivilegeEscalation: true # never use \"false\" here.\n```\n\n## Contributing\n\nThe Dockerfiles are generated from a template using [Orbit](https://github.com/gulien/orbit).\n\nIf you want to modify a Dockerfile you should instead edit the `utils/Dockerfile.blueprint`and then run the command:\n\n```bash\n$ orbit run generate\n```\n\nThis command will generate all the files from the \"blueprint\" templates.\n\nYou can then test your changes using the `build-and-test.sh` command:\n\n```bash\nTAG=v2-18-bullseye VARIANT=18-bullseye ./build-and-test.sh\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodingmachine%2Fdocker-images-nodejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthecodingmachine%2Fdocker-images-nodejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthecodingmachine%2Fdocker-images-nodejs/lists"}