Проблема с доступом к серверу в Docker-контейнере - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь создать и запустить образ докера из примера на этом сайте: https://kubernetes.io/docs/tutorials/hello-minikube/

//server.js
var http = require('http');

var handleRequest = function(request, response) {
   console.log('Received request for URL: ' + request.url);
   response.writeHead(200);
   response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8080);


//Dockerfile
FROM node:6.14.2
EXPOSE 8080
COPY server.js .
CMD node server.js

Я использую команды

docker build -t nsj .
docker run nsj

Они запускаются без ошибок, но я не могу получить доступсервер на локальном хосте: 8080.

Что не так?

1 Ответ

2 голосов
/ 25 октября 2019

Похоже, что по крайней мере две вещи неправильны:

  1. Вам необходимо сопоставить порт с хостом докера
  2. Вам необходимо привязать свой сервер к 0.0.0.0

Итак, вероятно, эти изменения (не проверены):

В вашем коде:

www.listen(8080, "0.0.0.0");

В вашей команде докера:

docker run nsj -p 8080:8080

Обратите внимание, чтоналичие EXPOSE 8080 в вашем Dockerfile фактически ничего не раскрывает. Он просто «помечает» этот порт в метаданных механизма докера и предназначен как для документации (чтобы люди, читающие Dockerfile, знали, что она делает), так и для инструментов, которые проверяют механизм докера.

Цитировать из reference :

Команда EXPOSE фактически не публикует порт. Он функционирует как тип документации между человеком, который создает образ, и человеком, который запускает контейнер, о том, какие порты предназначены для публикации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...