【发布时间】:2021-07-13 11:03:42
【问题描述】:
我尝试运行 Docker。我创建了文件 server.js:
'use strict';
const express = require('express');
// константы
const port = 8080;
const host = '0.0.0.0';
// приложение
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(port, host);
console.log(`running on http://${host}:${port}`);
我通过 npm install 创建了 package.json 和 init package.lock
{
"name": "docker",
"version": "1.0.0",
"description": "node.js on docker",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"keywords": [
"node",
"docker"
],
"author": "Molchanova Tatyana",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
我创建了一个 Dockerfile
FROM node:12
# создание директории приложения
WORKDIR /usr/src/app
# установка зависимостей
# символ астериск ("*") используется для того чтобы по возможности
# скопировать оба файла: package.json и package-lock.json
COPY package*.json ./
RUN npm install
# Если вы создаете сборку для продакшн
# RUN npm ci --only=production
# копируем исходный код
COPY . .
# EXPOSE декларирует, что можем пробросить порт 8080, но на самом деле не пробрасывает
EXPOSE 8080
CMD [ "node", "server.js" ]
当我创建 iamge 时: docker build -t hello-world .
它在控制台中运行: 运行在http://0.0.0.0:8080
然后我尝试使用外部和内部 8080 端口运行它: docker run --rm --name web -p 8080:8080 hello-world
当我通过链接http://0.0.0.0:8080 访问时 - 页面为空,无法访问网站 并且页面不仅无法通过 docker run 访问,而且当我使用终端中的命令运行 server.js 时 - 它无法访问。
只有当我指向本地主机时
const host = '127.0.0.1';
而不是
const host = '0.0.0.0';
在 server.js 文件中 它在终端运行 但不能在浏览器中运行为 Dockerfile - docker run --rm --name web -p 8080:8080 hello-world
请帮忙!
在 hosts 文件中一切正常,没有 0.0.0.0
【问题讨论】:
标签: node.js docker localhost port hosts