我创建了一个 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
来启动容器。
以下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
伊斯梅尔的回答对我有用
#docker run -p : 镜像名称 docker run -p 8080:8080 镜像名称
更深入的解释: 就我而言,我在 ec2 实例上运行它,其中 ec2 系统中的端口 80 已分配给其他内容。因此,我只能将我的主机端口分配给另一个端口,在我的例子中,我将其分配给 8080。
但是,我不想以这种方式访问我的API:http://x.x.x.x:8080/hotels
我想直接访问80端口,即访问网站的端口,我想通过以下方式访问:
要使上述工作正常进行,您需要执行以下操作:
docker run -p 8080:80 镜像名称
更深入的解释:在我的 aws 操作系统中,我仍然使用端口 8080 在内部运行它。但是当客户端通过 docker 内的操作系统(请原谅我的双关语)打开我的应用程序时,我将端口映射到 80。
因此,(双关语)在我的容器内操作时,外部用户通过端口 80 访问应用程序是没有问题的。但在内部,当 docker 与 aws 实例内的内核通信时,它仍然从 8080 调用它。