Skip to content

Build container images for your Node.js applications


Notifications You must be signed in to change notification settings


Repository files navigation


Build Status npm Latest Version npm Downloads Conventional Commits Code Style: Prettier License GitHub stars Twitter Follow

seel is a command-line tool that facilitates the build of container images for your Node.js applications. You don't need to master container best practices or write a Dockerfile to build a container image, it's just as simple as invoking a command from your shell or npm script.

  • Simple - No need to write a Dockerfile or master container best practices.
  • Flexible - Overwrite opinionated defaults to fit your needs.
  • Fast - Optimized image layers to take advantage of build caching.


Table of Contents (click to expand)



npx seel                      # Run it once.
npm install --global seel     # Install globally.
npm install --save-dev seel   # Install locally to use it in npm scripts.


yarn global add seel          # Install globally.
yarn add seel --dev           # Install locally to use it in npm scripts.


Note: seel uses the Docker daemon to build the container image. When you invoke the seel command, the daemon must be running and accessible through the /var/run/docker.sock socket.



Name Description
‑v, ‑‑version Print version.
‑h, ‑‑help Print usage information.
‑‑cwd Define the current working directory, defaults to ..
‑‑entrypoint Define the app entrypoint, defaults to bin or main script defined in package.json. The given path must be relative to the cwd.
‑‑extra‑files Define the extra files to include in the container image with a glob pattern, e.g. --extra-files 'public/**'.
‑‑label Define the container image label, e.g. --label key=value --label key2=value2. By default, the version, description and maintainer labels are added to the container image.
‑‑name Define the container image name, defaults to the app name defined in package.json.
‑‑pkg‑registry‑auth‑url Set-up authentication for the given package registry base URL, e.g. If the authentication token is not defined with ‑‑pkg‑registry‑auth‑token the environment variable AUTH_TOKEN will be used to read the authentication token.
‑‑pkg‑registry‑auth‑token Define the authentication token for the package registry base URL previously configured.
‑‑port Define the port that the container exposes at runtime, e.g. --port 3000 --port 4000/udp.
‑‑tag Define the container image tag, e.g. --tag latest --tag 1.0.0. By default, the Semantic Versioning strategy is used to define the container image tags.


import { buildImage, BuildImageOptions } from "seel";

const options: BuildImageOptions = {
  entrypoint?: string;
  extraFiles?: string[];
  name?: string;
  ports?: string[];
  tags?: string[];
  labels?: {
    [key: string]: string
  pkgRegistryAuth?: {
    url: string;
    token: string

buildImage("/usr/app", options)
  .then(stream => stream
    .once("error", () => {
  .catch(err => {


The examples directory contains the following examples:


Contributions are welcome!

Want to file a bug, request a feature or contribute some code?

Check out the contribution guidelines.


Thanks goes to these wonderful people (emoji key):

Kevin Pollet
Kevin Pollet

💻 📖 🚇

This project follows the all-contributors specification. Contributions of any kind welcome!