Problème n° 1 — Le conteneur fantôme

Contexte

Vous êtes d’astreinte. Un collègue a déployé myapp:1.4 vendredi soir avant de partir. Lundi matin, les utilisateurs signalent que l’application est inaccessible. Vous vous connectez au serveur via SSH.

Fichiers du projet :

server.js :

const express = require('express');
const app = express();

const PORT = process.env.PORT || 3000;
const HOST = process.env.HOST || '127.0.0.1';

app.get('/health', (req, res) => res.json({ status: 'ok' }));
app.get('/', (req, res) => res.send('Hello world'));

app.listen(PORT, HOST, () => {
  console.log(`Server started on port ${PORT}`);
});

Dockerfile :

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Ce que tu observes sur le serveur :

$ docker ps
CONTAINER ID   IMAGE       STATUS            PORTS
a3f91bc2d1e4   myapp:1.4   Up 3h (healthy)   0.0.0.0:3000->3000/tcp

$ curl http://localhost:3000
curl: (7) Failed to connect to localhost port 3000: Connection refused

$ docker logs a3f91bc2d1e4 --tail 5
Server started on port 3000
Database connected
Ready.

$ docker inspect a3f91bc2d1e4 | grep -i restart
"RestartPolicy": { "Name": "unless-stopped" }
"RestartCount": 0

$ sudo ufw status
Status: inactive

Question : Le conteneur est sain, aucun plantage, aucun pare-feu, le port semble correctement mappé. Pourquoi l’application est-elle inaccessible ?

⌛ Answer coming in
13 days
03 hours
44 minutes
51 seconds

Answer on:

Laisser un commentaire