我正在使用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镜像并运行了该命令
docker run -p 5001:5000 farhan / mynode
因为我已经在nodejs服务器文件和docker文件中提到服务器的端口5000,所以我将5001公开为端口。
现在它可以正常运行并在控制台上显示nodejs服务器正在运行,但是每当我使用localhost:5001时,它就会显示找不到页面。这意味着docker容器可以正常工作,但浏览器无法访问。
答案 0 :(得分:1)
由于使用的是工具箱,因此必须通过http://linux_docker_host_ip:5001访问浏览器中的应用。
要了解主机ip,请转到virtualbox,然后查看docker计算机的ip地址。通常,在虚拟框中单击虚拟机时,您会在右下角找到一个网络图标。默认情况下,IP为“ 192.168.99.100”
答案 1 :(得分:1)
暴露端口意味着您让请求通过该端口。您必须公开端口5000,而不是5001。
public static byte[] xor(byte[]... arrays) {
int len = 0;
for (byte[] array : arrays)
len = Math.max(len, array.length);
byte[] result = new byte[len];
for (int i = 0; i < len; i++) {
byte b = 0;
for (byte[] array : arrays)
b ^= i < array.length ? array[i] : 0;
result[i] = b;
}
return result;
}
此外,您不应将Express应用程序的HOST设置为EXPOSE 5000
。如果这样做,则只有localhost(容器)才能发出请求。
通常,您不设置主机(默认为0.0.0.0并接受所有内容):
localhost