J'ai une application Node.js / Express simple:
version: '3.4'
services:
service1:
image: xxxxxx
ports:
- 8080:8080
volumes:
- xxxxxxxx
myapp:
build:
context: .
dockerfile: Dockerfile
networks:
- private
ports:
- 3000
command:
node src/app.js
Cela fonctionne bien quand je la lance comme: node src / app.js
Maintenant je ' J'essaye de l'exécuter dans un conteneur Docker. Dockerfile est:
This site canât be reached localhost refused to connect.
Ça démarre bien: docker run
Listening on port 3000
Mais maintenant je ne peux pas y accéder dans mon navigateur: http: // localhost: 3000
FROM node:8 WORKDIR /app ADD src/. /app/src ADD package.json package-lock.json /app/ RUN npm install COPY . /app EXPOSE 3000 CMD [ "node", "src/app.js" ]
Il en va de même si je essayez de l'exécuter dans docker-compose:
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
Je ne sais pas si je gère correctement les ports dans les deux fichiers docker
3 Réponses :
Vous devez publier les ports
docker run -p 3000:3000 <my image>
-p - signifie publier
essayez ceci:
services:
myapp:
build:
context: .
dockerfile: Dockerfile
networks:
- private
ports:
- 3000:3000 ##THIS IS THE CHANGE, YOU NEED TO MAP MACHINE PORT TO CONTAINER
command:
node src/app.js
Lorsque vous travaillez avec docker, vous devez définir l'hôte de votre application comme 0.0.0.0 au lieu de localhost .
Pour votre application express, vous pouvez définir l'hôte lors de l'appel app.listen .
Vérifiez le documentation : app.listen ([port [ hôte [ backlog]]] [ callback])
Votre code express doit être mis à jour en:
services:
myapp:
build:
context: .
dockerfile: Dockerfile
networks:
- private
ports:
- 3000:3000
command:
node src/app.js
Il est également important de publier les ports docker:
docker run -p 3000: 3000 const port = 3000
const host = '0.0.0.0'
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, host, () => console.log(`Example app listening on ${port}!`))
Si la publication de ports n'a pas aidé comme d'autres réponses mentionnées, et si vous êtes sur MacOS, essayez: app.listen (port, '0.0.0.0', () => console.log (`Exemple d'application écoutant sur le port $ {port}! `)) à la place.