Przerwane połaczenie z serverem w kontenerze

0

Cześć.
Zrobiłem bardzo prosty program:

import * as http from 'http';

http.createServer((request, response)=> {
    response.writeHead(200, {
        'Content-Type': 'text/plain'
    });
    response.end(
`Hello!
My name is Rajesh and I'm here to help you with all of your issues.`)
}).listen(8080, '127.0.0.1'); 

Dockerfile:

FROM node:latest

WORKDIR /usr/src

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080

CMD [ "node", "serwer.js" ]

I puściłem komendy:

docker build . -t adam/node_docker ; docker run -d  -p 1236:8080 -t adam/node_docker

Po wpisaniu w przeglądarkę: 127.0.0.1:1236 dostaję komunikat:
"Przerwane połączenie"

Czy wiecie co zrobiłem nie tak?

0

A bez docera działa? Co masz w logach na dockerze?

0

Bez dockera działa dobrze.
Komenda docker logs uruchomiona na kontenerze nic nie zwraca.

6

Spróbuj .listen(8080, '0.0.0.0');.

Bindowanie pod 127.0.0.1 sprawia, że socket nasłuchuje tylko na loopback device (tj. specjalnej "karcie sieciowej" dedykowanej dla localhost), co sprawdza się w przypadku podejścia bez-kontenerowego (bo wpisując w przeglądarkę 127.0.0.1 ona łączy się do tego samego loopback device, do którego podpięta jest aplikacja - tego na hoście), ale w sytuacji z kontenerem już nie (bo każdy kontener otrzymuje swój własny, prywatny loopback device); a bindowanie pod 0.0.0.0 oznacza tyle, że aplikacja będzie nasłuchiwała połączeń z każdego urządzenia sieciowego, nie tylko loopback.

0

Działa!
Wielkie dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1