node.js - 无法在 Centos7 容器中公开 node express 应用程序的端口
问题描述
我正在创建一个图像节点 HTTP 服务器应用程序。应用程序在 3000 端口上运行。但我无法从本地主机访问它。
Dockerfile:
FROM centos:7
RUN curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
RUN yum install -y nodejs
RUN node -v
#yarn
RUN curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo
RUN rpm --import https://dl.yarnpkg.com/rpm/pubkey.gpg
RUN yum install -y yarn
# Set up mongodb yum repo entry
RUN echo -e "\
[mongodb-org-4.0]\n\
name=MongoDB Repository\n\
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/\n\
gpgcheck=1\n\
enabled=1\n\
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc\n" >> /etc/yum.repos.d/mongodb.repo
# Install mongodb
RUN yum update -y && yum install -y mongodb-org
COPY server.js /home/server.js
COPY start.sh /home/start.sh
COPY package.json /home/package.json
# Install js dependencies
RUN cd /home
RUN yarn
EXPOSE 3000
ENTRYPOINT ["sh", "/home/start.sh"]
开始.sh:
echo "HELLO FROM SH FILE!"
yarn
node ./server.js
server.js:
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
对于构建容器,我使用:
docker build -t "gepick:dev1" .
对于启动容器,我使用:
docker run -i -t 2f0fd105f299 -p 3000:3000 /bin/bash
我确定该应用程序已启动并正在运行,因为控制台输出是:
Example app listening on port 3000!
但是当我尝试在 localhost:3000 上运行 app throw browser 时,我得到:
This site can’t be reached
解决方案
这是什么docker run -i -t 2f0fd105f299 -p 3000:3000 /bin/bash
???
您的启动命令应该是
docker run -i -t -p 3000:3000 2f0fd105f299
在图像 ID 之后放置公开参数只是将它们传递给您的start.sh
脚本。Docker 只读取图像名称/ID 之前的参数。
推荐阅读
- spring-boot - 无法检索远程 JWK 集:login.microsoftonline.com
- c# - 将 HTML 页面作为最后一页添加到 PDF 文档
- mongodb - $在 mongo 数据库中添加值
- asp.net-mvc - 错误:通过 Telerik Web UI 上的错误构建项目
- angular - Angular:无法分配给引用或变量中的错误
- python-3.x - (pandas) 访问索引处特定列的除前 3 行之外的所有行
- postgresql - 从 Postgresql 中删除 bytea 数据
- docker - 错误:准备失败:来自守护程序的错误响应:在此服务器上找不到请求的 URL /v1.25/info
- sql-server - azure 数据工厂上的存储过程失败并显示错误消息:执行输出的长度超出限制(目前约为 1M)
- c# - 使用 Ocelot 的服务发现 ASP.Net Core