Better Node.js Docker images with multiple specialized variants for different development and production needs.
betterweb/node:latest
- Latest stable Node.js on Alpine Linux (currently 24.x)betterweb/node:24
- Node.js 24.x (major version)betterweb/node:24.0.0
- Specific Node.js version
betterweb/node:dev
- Development image with additional tools (not for production)betterweb/node:dev-24
- Development image for Node.js 24.xbetterweb/node:dev-24.0.0
- Development image for specific version
betterweb/node:devcontainer-latest
- VS Code DevContainer with development toolsbetterweb/node:devcontainer-24
- DevContainer for Node.js 24.xbetterweb/node:devcontainer-24.0.0
- DevContainer for specific version
betterweb/node:dind-latest
- Node.js with Docker and Docker Compose supportbetterweb/node:dind-24
- DIND for Node.js 24.xbetterweb/node:dind-24.0.0
- DIND for specific version
# Run latest Node.js version
docker run -it betterweb/node:latest
# Run specific version
docker run -it betterweb/node:24
# Run with mounted volume for development
docker run -it -v $(pwd):/app -w /app betterweb/node:24 npm start
# Run with port mapping
docker run -it -p 3000:3000 -v $(pwd):/app -w /app betterweb/node:24 node server.js
# Interactive development environment
docker run -it -v $(pwd):/app -w /app betterweb/node:dev-24 bash
# Install packages with native dependencies
docker run -it -v $(pwd):/app -w /app betterweb/node:dev-24 install_packages "bcrypt sharp"
# Run development server with live reload
docker run -it -p 3000:3000 -v $(pwd):/app -w /app betterweb/node:dev-24 npm run dev
# Run with Docker socket access (Linux/macOS)
docker run -it --privileged -v /var/run/docker.sock:/var/run/docker.sock betterweb/node:dind-24 bash
# Run CI/CD pipeline
docker run -it --privileged -v $(pwd):/app -w /app betterweb/node:dind-24 npm test
# Interactive DevContainer environment
docker run -it -v $(pwd):/workspace -w /workspace betterweb/node:devcontainer-24 bash
# With VS Code DevContainer extension (use in .devcontainer/devcontainer.json)
FROM betterweb/node:24
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
FROM betterweb/node:dev-24
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]
The dev variant includes a helper script for installing packages with native dependencies:
FROM betterweb/node:dev-24
WORKDIR /app
COPY package*.json ./
# Use install_packages for packages that need compilation
RUN install_packages "bcrypt canvas sharp"
COPY . .
CMD ["npm", "run", "dev"]
FROM betterweb/node:dind-24
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
# Can run docker commands within this container
RUN docker --version
CMD ["npm", "test"]
For VS Code DevContainers, use in .devcontainer/devcontainer.json
:
{
"name": "Node.js DevContainer",
"image": "betterweb/node:devcontainer-24",
"features": {},
"forwardPorts": [3000],
"postCreateCommand": "npm install"
}
- Alpine Linux base for minimal size
- Node.js installed from official sources
gosu
for proper user privilege handling- Custom entrypoint script
- Non-root
node
user
- Built on top of base image
- Includes
install_packages
script for easy npm package installation with native dependencies - Pre-configured build tools (python, make, g++) for compiling native modules
- Not recommended for production use
- Debian-based for broader tool compatibility
- Pre-installed development tools (git, curl, make, g++, python3)
- Sudo access for the
node
user - Optimized for VS Code DevContainer environments
- Built on top of base Alpine image
- Docker Engine and Docker CLI installed
- Docker Compose v2 support
- Runs dockerd in background
- User added to docker group
Images are built for multiple Node.js versions:
- Base images: All supported Node.js versions (currently 18.x, 20.x, 21.x, 22.x, 23.x, 24.x)
- Specialized variants (dev, devcontainer, dind): Latest 3 major Node.js versions (currently 22.x, 23.x, 24.x)
- Update schedule: Monthly on the 1st of each month
Multi-platform images supporting:
linux/amd64
(x86_64)linux/arm64/v8
(ARM64)
- All images run as non-root
node
user by default - Regular security updates through automated builds
- Minimal attack surface with Alpine Linux base (except devcontainer)
- No secrets or credentials included in images
Images are automatically built and published via GitHub Actions:
- prepare-matrix: Determines Node.js versions and platforms
- build: Builds base images for all versions
- build-dev: Builds development variants (limited versions)
- build-devcontainers: Builds VS Code DevContainer variants (limited versions)
- build-dind: Builds Docker-in-Docker variants (limited versions)
This repository contains:
Dockerfile
- Base Node.js imageDockerfile.dev
- Development variantDockerfile.devcontainer
- VS Code DevContainer variantDockerfile.dind
- Docker-in-Docker variant.github/workflows/buildAndPub.yml
- Automated build pipeline
This project follows the same license as the official Node.js Docker images.