在docker中运行NodeJSAngular 应用程序时返回FAILED

cbwuti44  于 2022-10-23  发布在  Docker
关注(0)|答案(2)|浏览(185)

bounty 3天后到期。这个问题的答案有资格获得+50的声誉奖励。ChanGan正在寻找一个规范的答案

我正在尝试设置一个简单的项目对接POC。包括ANGLE、EXPRESS、NodeJS和MongoDBMap集。
ANGLE在4200和NodeJS 3000上运行
https://github.com/changan1111/UserManagement
它在本地相同的设置下工作得很好。
当我去找码头的时候?
我看到节点js已启动并正在运行。

当我看到文件列表时,我看到的都是好的。

当我使用http://localhsot/user时,它返回值

但当我从浏览器中读取值时,它显示

我尝试了几个解决方案,但都返回了失败的相同响应。这是怎么回事..有没有人可以看看这个,让我知道设置上有什么问题。

app.use(cors());

/*
app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "req.headers.origin"); // update to match the domain you will make the request from
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,GET,POST");

  next();
});*/

/*
app.use(cors({
  "origin": ['http://localhost:3000'],
  "methods": "GET,PUT,POST",
  "preflightContinue": false,
   "credentials": true
}));*/

也尝试使用IP地址http://192.168.0.103/,但未更改Dockerfile:

3duebb1j

3duebb1j1#

你的问题并不清楚,但根据你提供的图片,你的Angular 应用程序似乎无法在127.0.0.1中到达你的Express后端。
您将http://localhost:3000配置为您的API端点,但请注意,从Docker的Angular 来看,localhost指的是容器本身,可能与您的实际主机不同。
要解决该问题,您可以向Express指示它应该使用0.0.0.0侦听每个网络接口:

app.listen(3000, '0.0.0.0', () => {
  console.log("listening on PORT verify: 3000");
});

nodejs guide documentation中也举例说明了该解决方案。
此外,请尝试将environment文件中的Url变量调整为地址http://localhost,而不指定端口,即使用端口80:根据您上传到Github中的存储库的代码,您的应用程序似乎侦听端口3000,但在您的屏幕截图中,您肯定使用了端口80。这背后的原因是,如果express同时服务于您的Angular SPA和您的API,并且您能够分别使用http://localhost/readhttp://localhost/user从您的主机联系这两个东西,那么按照建议将您的Url变量调整为http://localhost可能会起到作用。

ws51t4hk

ws51t4hk2#

在运行您的容器时,您是否尝试过这样暴露您的端口?
docker run -p 4000:4000 container_name(假设此处为Linux主机)
或者只是
也许是docker run --network="host" container_name
然后通过localhost:4000从Docker内部或外部的任何服务访问。
容器的内部localhost将通过这种方式与实际主机的localhost匹配。这有一些缺点,但我假设您不是在生产环境中运行它,所以它应该不会有太大影响。
目前还不清楚你是否正试图从Docker外部访问你的Dockeralized应用程序。您的后端和前端是否共享同一个容器?它们都是集装箱式的吗?
EXPOSE只允许Docker的内部应用程序找到该端口IIRC。
您需要指定要向主机公开的端口。

相关问题