Запуск приложения в контейнере Docker в системном браузере - PullRequest
1 голос
/ 07 марта 2019

У меня есть следующие файлы:

Dockerfile * * 1004

FROM node:8

# Create app directory
WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080
CMD [ "npm", "start" ]

server.js

'use strict';

const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';

// App
const app = express();
app.get('/', (req, res) => {
  res.send('Hello world\n');
});

app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);

package.json:

{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "First Last <first.last@example.com>",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.16.1"
  }
}

.dockerignore:

node_modules
npm-debug.log

Затем я создаю образы Docker:

docker build -t nodeapp -f ./Dockerfile .

Работает, изображение создано. Затем я запускаю его:

docker run -p 49160:8080 -d nodeapp

И следующее:

docker exec -it <container id> /bin/bash

Если я наберу curl -i localhost:49160, я получу Failed to connect to localhost port 49160: Connection refused.

Тем не менее, если я наберу curl -i localhost:8080 это нормально:

HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
ETag: W/"c-M6tWOb/Y57lesdjQuHeB1P/qTV0"
Date: Wed, 06 Mar 2019 23:20:41 GMT
Connection: keep-alive

Hello world

Тем не менее, я не могу получить localhost:8080 (ни localhost:49160) в Chrome на моей исходной системе, т. Е. Вообще из Docker.

Можно ли запускать закрепленные приложения в браузерах? Как это исправить, чтобы заставить его работать?


EDIT

1) Я должен был проверить IP-адрес с docker-machine ip
2) перейдите на : 49160

1 Ответ

0 голосов
/ 07 марта 2019

Краткий ответ:

docker run -p 8080:8080 -d nodeapp

Объяснено:

Когда вы пытаетесь получить доступ к порту 49160 из экземпляра, этоОбычно это говорит о том, что в соединении отказано, потому что этот порт отображается из вашего контейнера в вашу систему.Таким образом, только ваша система сможет проверить этот порт.

Я попробовал ваши файлы, и я могу правильно получить доступ к серверам, используя http://localhost:49160

Если вы хотите получить доступ к порту 8080 извашей системы, затем измените порт сопоставления при запуске контейнера:

docker run -p 8080:8080 -d nodeapp
# -p portAccessibleFromYourSystem:portYouWantToShare
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...