无法在浏览器上访问 Docker nodejs 容器

Unable to access the Docker nodejs container on the browser

我在家里使用 windows 版本 10,所以我使用 "docker toolbox for windows",其中我的 docker 客户端是 windows/amd64,服务器是 linux/amd64。

我用三个文件构建了一个非常简单的 nodejs 应用程序。

server.js

/**


* Created by farhanx on 7/28/2018.
 */
'use strict';

const express = require('express');

// Constants
const PORT = 5000;
const HOST = 'localhost';

// App
const app = express();


app.get('/', function (req, res) {

    res.send('Hello world\n');
});

app.get('/students', function (req, res) {

    res.send('student page\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"
  }
}

Docker 文件

FROM node:8
# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install
# If you are building your code for production
# RUN npm install --only=production

# Bundle app source
COPY . .

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

然后我成功构建了我的 docker 图像并且 运行 这个命令

docker run -p 5001:5000 farhan/mynode

因为我在 nodejs 服务器文件和 docker 文件中提到了服务器的端口 5000,所以我将 5001 公开为一个端口。

现在它运行良好,并在控制台上显示 nodejs 服务器是 运行,但每当我使用 localhost:5001 时,它都会显示找不到页面。这意味着 docker 容器以某种方式工作正常,但浏览器无法访问。

由于您使用的是工具箱,因此您必须通过 http://linux_docker_host_ip:5001 在浏览器中访问应用程序。

要知道主机 ip,请转到 virtualbox,然后查看 docker 机器的 ip 地址。通常,当您在虚拟框中单击 vm 时,您会在右下角找到一个网络图标。默认情况下,IP 为“192.168.99.100”

公开端口意味着您允许请求该端口的请求。您必须公开端口 5000 而不是 5001。

EXPOSE 5000

此外,您不应将 Express 应用的主机设置为 localhost。如果这样做,只有本地主机(容器)才能发出请求。

通常,您不设置主机(它默认为 0.0.0.0 并接受所有内容):

app.listen(PORT);