Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
Docker

Docker: Use Build Secrets to Keep API Keys Out of Images

- 06.06.26 - ErcanOPAK

🔑 npm install Needs Token. But Token Shouldn’t Be in Image.

Build-time secrets (npm tokens, SSH keys) often leak into layers. Docker BuildKit secrets mount secrets at build time, never stored.

📝 Dockerfile with Secrets

# syntax=docker/dockerfile:1.4
FROM node:18 AS builder

WORKDIR /app
COPY package*.json ./

# Secret mount (not stored in layer)
RUN --mount=type=secret,id=npmrc \
    cp /run/secrets/npmrc .npmrc && \
    npm ci

COPY . .
RUN npm run build

FROM node:18-alpine
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/server.js"]

🔧 Build with Secret

# Create secret file
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc

# Build with secret
DOCKER_BUILDKIT=1 docker build \
  --secret id=npmrc,src=.npmrc \
  -t myapp .

# Clean up secret after build
rm .npmrc

# Multi-secret example
RUN --mount=type=secret,id=github_token \
    --mount=type=secret,id=aws_key \
    ./deploy.sh

💡 Why This Matters

  • Traditional ARG/ENV leaves secrets in image layers (docker history)
  • Secrets mount only exists during RUN command, not in final image
  • Perfect for npm tokens, SSH keys, API keys
  • Requires BuildKit (DOCKER_BUILDKIT=1)

“NPM token was in my image. Anyone with docker history could see it. Build secrets fixed it. Token used only during build, not stored. Security win.”

— Security Engineer

Related posts:

Docker: Use Build Cache Effectively with Layer Ordering

Docker Images Work but Are Hard to Maintain

Docker: Use Docker Commit to Save Container State as Image

Post Views: 4

Post navigation

Kubernetes: Use PodDisruptionBudget to Prevent Service Interruption
AI Prompt: Generate API Documentation from Code Comments

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

June 2026
M T W T F S S
1234567
891011121314
15161718192021
22232425262728
2930  
« May    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (882)
  • Get the First and Last Word from a String or Sentence in SQL (838)
  • How to select distinct rows in a datatable in C# (808)
  • How to make theater mode the default for Youtube (805)
  • Add Constraint to SQL Table to ensure email contains @ (580)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (579)
  • Average of all values in a column that are not zero in SQL (538)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (505)
  • Find numbers with more than two decimal places in SQL (454)

Recent Posts

  • C#: Use String Interpolation Instead of Concatenation
  • C#: Use Tuples to Return Multiple Values from Methods
  • SQL: Use ISNULL and NULLIF for Smart NULL Handling
  • .NET Core: Use Data Annotations for Model Validation
  • Git: Use Git Clean to Remove Untracked Files
  • Ajax: Add Custom Headers to Fetch Requests
  • JavaScript: Use console.table to Display Arrays as Tables
  • HTML: Use Spellcheck Attribute to Enable Browser Spell Check
  • CSS: Use user-select to Prevent Text Selection
  • Windows 11: Use Snipping Tool for Instant Screenshots

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (882)
  • Get the First and Last Word from a String or Sentence in SQL (838)
  • How to select distinct rows in a datatable in C# (808)
  • How to make theater mode the default for Youtube (805)

Recent Posts

  • C#: Use String Interpolation Instead of Concatenation
  • C#: Use Tuples to Return Multiple Values from Methods
  • SQL: Use ISNULL and NULLIF for Smart NULL Handling
  • .NET Core: Use Data Annotations for Model Validation
  • Git: Use Git Clean to Remove Untracked Files

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com