我有以下文件:
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:8080
(localhost:49160
也没有),也就是说,我完全无法从Docker中退出。
是否可以在浏览器中运行dockered应用程序?如何对其进行修复以使其正常工作?
编辑:
1)我必须已经用docker-machine ip
签出了IP地址
2)转到
答案 0 :(得分:0)
简短答案:
docker run -p 8080:8080 -d nodeapp
说明:
当您尝试从实例内部访问端口49160时,通常会说拒绝连接,因为该端口已从您的容器映射到您的系统。因此,只有您的系统才能检查此端口。
我尝试了您的文件,并且可以使用http://localhost:49160
正确访问服务器如果要从系统访问端口8080,请在运行容器时更改映射端口:
docker run -p 8080:8080 -d nodeapp
# -p portAccessibleFromYourSystem:portYouWantToShare