1
votes

Comment accéder à l'application de conteneur Docker en local?

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


1 commentaires

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.


3 Réponses :


0
votes

Vous devez publier les ports

docker run -p 3000:3000 <my image>

-p - signifie publier


0 commentaires

0
votes

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


0 commentaires

0
votes

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:

  • Exécution de docker: docker run -p 3000: 3000
  • Exécution de docker-compose:
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}!`))


0 commentaires