在本地主机上运行 docker 容器不起作用

问题描述 投票:0回答:2

我创建了一个 Dockerfile 镜像,其中包含一个简单的 React 应用程序样板结果:

npx create-react-app my-app

FROM node
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 4000
CMD "npm" "start

一切正常,创建了图像,启动了容器,没有错误,但无法在本地主机上打开,有人知道可能是什么问题吗?

我已经使用

docker run -p 4000:4000 -it react-repo
来启动容器。

javascript python docker docker-compose docker-swarm
2个回答
3
投票

以下express.js 应用程序的示例 Docker 文件。

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}`);
FROM node:14

WORKDIR /usr/src/app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080
CMD [ "node", "server.js" ]

跑步,

# docker run -p <host-port>:<container-port> imageName
docker run -p 8080:8080 imageName

0
投票

伊斯梅尔的回答对我有用

#docker run -p : 镜像名称 docker run -p 8080:8080 镜像名称

更深入的解释: 就我而言,我在 ec2 实例上运行它,其中 ec2 系统中的端口 80 已分配给其他内容。因此,我只能将我的主机端口分配给另一个端口,在我的例子中,我将其分配给 8080。

但是,我不想以这种方式访问我的API:http://x.x.x.x:8080/hotels

我想直接访问80端口,即访问网站的端口,我想通过以下方式访问:

http://x.x.x.x/hotels

要使上述工作正常进行,您需要执行以下操作:

docker run -p 8080:80 镜像名称

更深入的解释:在我的 aws 操作系统中,我仍然使用端口 8080 在内部运行它。但是当客户端通过 docker 内的操作系统(请原谅我的双关语)打开我的应用程序时,我将端口映射到 80。

因此,(双关语)在我的容器内操作时,外部用户通过端口 80 访问应用程序是没有问题的。但在内部,当 docker 与 aws 实例内的内核通信时,它仍然从 8080 调用它。

© www.soinside.com 2019 - 2024. All rights reserved.