Команда в контейнере в Docker
Команда в контейнере выполняется
внутри уже работающего сервиса
и не заменяет его главный процесс.
Сервер на node уже ждёт
соединений, отдельный
sleep для демонстрации
не нужен.
Скрипт слушает 3000
и отдаёт hello:
const http = require('node:http');
const server = http.createServer((req, res) => {
res.end('hello');
});
server.listen(3000, '0.0.0.0');
Образ собирается из
Dockerfile на node:24:
FROM node:24
WORKDIR /app
COPY server.js .
CMD ["node", "server.js"]
Сервис web в фоне
с парой портов 3000.
Файл compose.yaml:
services:
web:
build: .
ports:
- "3000:3000"
Подъём в фоне оставит главный процесс node в работе. Запуск проекта:
docker compose up -d --build
Короткий вызов node напечатает
inner в ту же копию,
где уже слушает сервер:
docker compose exec web node -e "console.log('inner')"
В работающем сервисе api запустите короткий вызов node, который напечатает ping, не останавливая сервер.
Откройте localhost:3000 и убедитесь, что ответ страницы не пропал.