在系统浏览器中运行Docker容器中包含的应用程序

时间:2019-03-06 23:32:53

标签: docker

我有以下文件:

Dockerfile

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

但是,我无法在原始系统的Chrome中获得localhost:8080localhost:49160也没有),也就是说,我完全无法从Docker中退出。

是否可以在浏览器中运行dockered应用程序?如何对其进行修复以使其正常工作?


编辑

1)我必须已经用docker-machine ip签出了IP地址
2)转到 :49160

1 个答案:

答案 0 :(得分:0)

简短答案:

docker run -p 8080:8080 -d nodeapp

说明:

当您尝试从实例内部访问端口49160时,通常会说拒绝连接,因为该端口已从您的容器映射到您的系统。因此,只有您的系统才能检查此端口。

我尝试了您的文件,并且可以使用http://localhost:49160

正确访问服务器

如果要从系统访问端口8080,请在运行容器时更改映射端口:

docker run -p 8080:8080 -d nodeapp
# -p portAccessibleFromYourSystem:portYouWantToShare