Нативный модуль в Docker
Нативный модуль собирается
при установке, и на Alpine
для этого не хватает
компилятора.
Пакет bcrypt лежит
в dependencies,
но server.js его
не вызывает - нужен лишь
честный шаг npm install.
На node:24 установка
проходит без дополнительных
системных пакетов.
Скрипт по-прежнему отдаёт
hello:
const http = require('node:http');
const server = http.createServer((req, res) => {
res.end('hello');
});
server.listen(3000, '0.0.0.0');
В package.json указан
bcrypt среди зависимостей
запуска:
{
"name": "app",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"bcrypt": "5.1.1"
}
}
Рабочий Dockerfile
на node:24-alpine
ставит python3,
make и g++
через apk add перед
npm install:
FROM node:24-alpine
WORKDIR /app
RUN apk add --no-cache python3 make g++
COPY package.json .
RUN npm install --omit=dev
COPY server.js .
USER node
CMD ["node", "server.js"]
Без этих пакетов шаг установки
останавливается, поэтому
рабочий образ книги остаётся
node:24, а Alpine
здесь - отдельная проверка
с компилятором.
Сервис с портом 3000:
services:
app:
build: .
ports:
- "3000:3000"
После пересборки страница
покажет hello.
Запуск проекта:
docker compose up -d --build
Опишите сервис hash на node:24-alpine с bcrypt в package.json и системными пакетами для сборки.
Соберите образ на полном node:24 с тем же package.json и убедитесь, что установка проходит без пакетов сборки Alpine.