Skip to content
Back to skills

Docker

BSecurity

Docker для Node — эталонный multistage Dockerfile (node-slim, npm ci --omit=dev, non-root, HEALTHCHECK), оптимизация слоёв/размера, безопасность (.dockerignore, секреты не в слои), compose (healthcheck, force-recreate vs restart), типовые ошибки (ECONNREFUSED). Use для написания/ревью Dockerfile и docker-compose, починки сборки/поднятия.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 11, 2026
toolsgonodedockergit

Works with

  • cli

Security analysis

B85/100
  • highPerforms destructive filesystem operations

Pro shows the line behind each finding and how to fix it

Scanned September 11, 2026

npx -y skills add Vitammiin/agent-vorcl-flow --skill docker --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Docker?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Docker
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/vitammiin-docker/badge)](https://www.skillsdirectory.com/skills/vitammiin-docker)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: docker
description: Docker для Node — эталонный multistage Dockerfile (node-slim, npm ci --omit=dev, non-root, HEALTHCHECK), оптимизация слоёв/размера, безопасность (.dockerignore, секреты не в слои), compose (healthcheck, force-recreate vs restart), типовые ошибки (ECONNREFUSED). Use для написания/ревью Dockerfile и docker-compose, починки сборки/поднятия.
---

# Навык: Docker для Node-проектов

Критерий готовности — вывод команд: `docker build` прошёл (размер показан), `docker compose ps` — все `healthy`.

## Multistage-эталон
`deps` (`COPY package*.json` → `npm ci` — слой кэшируется) → `build` (`COPY . .` после deps → `npm run build`) → `runner`: `node:22-slim` (пин, не `latest`), `NODE_ENV=production`, `npm ci --omit=dev`, `COPY --from=build /app/dist ./dist`, `USER node`, `EXPOSE`, `HEALTHCHECK ... CMD node -e "fetch('http://127.0.0.1:3000/health')..."`, `CMD ["node","dist/index.js"]`.

## Оптимизация
Манифесты до исходников (кэш `npm ci`); slim-база (~5x меньше; alpine — musl-риски у нативных модулей); в runner только артефакты; связанные `RUN` одним слоем с очисткой (`rm -rf /var/lib/apt/lists/*`); `.dockerignore` уменьшает контекст. Slim-Node обычно 150–300 MB; раздуто — смотри `docker history`.

## Безопасность
Non-root `USER node` в финальном stage. Секреты НЕ в слои: `COPY .env` и `ARG SECRET` запрещены (слои читаются `docker history`); runtime-`env` или BuildKit `--mount=type=secret`. `.dockerignore` обязательные строки: `node_modules`, `.git`, `.env*`, `dist`, `*.md`, `.github`. Пин версий всех образов.

## Compose и env-правило (критично)
- После изменения env/`.env`: `docker compose up -d --force-recreate`; `docker compose restart` НЕ перечитывает env.
- Healthcheck баз: `pg_isready` / `mongosh --eval "db.adminCommand('ping')"` / `redis-cli ping`; приложение — `depends_on: { db: { condition: service_healthy } }` (без condition — ждёт лишь старта).
- После поднятия: `compose ps` до `healthy` у всех + `logs --tail 50` без `ECONNREFUSED`/рестарт-циклов.

## Типовые ошибки
`ECONNREFUSED` между сервисами → `localhost` вместо **имени сервиса** compose; env «не применилась» → `restart` вместо `force-recreate`; падение на старте → нет `service_healthy`; «No open ports» на хостинге → слушать `0.0.0.0:$PORT`; данные пропали → `down -v` удалил volumes.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…