[英]Unable to access the Docker nodejs container on the browser
我使用的是Windows ver 10家庭版,因此我使用的是“ Windows的docker工具箱”,其中我的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鏡像並運行了該命令
泊塢窗運行-p 5001:5000 Farhan / mynode
因為我已經在nodejs服務器文件和docker文件中提到服務器的端口5000,所以我將5001公開為端口。
現在它可以正常運行,並在控制台上顯示nodejs服務器正在運行,但是每當我使用localhost:5001時,它就會顯示找不到頁面。 這意味着docker容器可以正常工作,但瀏覽器無法訪問。
由於您正在使用工具箱,因此必須通過http:// linux_docker_host_ip:5001在瀏覽器中訪問應用程序。
要知道主機IP,請轉到virtualbox,然后查看Docker機器的IP地址。 通常,在虛擬框中單擊虛擬機時,您會在右下角找到一個網絡圖標。 默認情況下IP為``192.168.99.100''
公開端口意味着您允許請求該端口的請求通過。 您必須公開端口5000,而不是5001。
EXPOSE 5000
另外,您不應將Express應用程序的HOST設置為localhost
。 如果這樣做,則只有本地主機(容器)才能發出請求。
通常,您不設置主機(默認為0.0.0.0並接受所有內容):
app.listen(PORT);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.