Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – Docker容器中的节点http-proxy大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下@L_874_1@在我的本地环境中运行良好.但是,当我尝试从Docker容器(通过Boot2Docker)运行相同的@L_874_1@时,我根本无法访问 https://[boot2docker_ip]:4000

我尝试使用所有这些选项更新下面@L_874_1@中的目标值,但它们似乎都没有做到这一点:

target:’http:// localhost:3000′,
目标:’http://0.0.0.0:3000′,
目标:’http://127.0.0.1:3000′,
target:’http://< boot2docker_ip>:3000′,

var fs = require('fs');    

require('http-proxy').createProxyServer({
  ssl: {
    key: fs.readFileSync(__dirname + '/certs/ssl.key','utf8'),cert: fs.readFileSync(__dirname + '/certs/ssl.crt','utf8')
  },target: 'http://localhost:3000',ws: true,xfwd: true
}).listen(4000);

我正在使用https://github.com/nodejitsu/node-http-proxy的node-http-proxy软件包

编辑

这是一个尝试这种行为的Git repo;为简单起见,我已经检查了假SSl.

Dockerfile:

FROM readytalk/nodejs

ADD ./src /app
ADD ./ssl-proxy /proxy

COPY ./run.sh /run.sh
RUN chmod +x /run.sh

EXPOSE 3000
EXPOSE 4000

ENTRYPOINT ["/run.sh"]

run.sh:

#!/bin/sh

/nodejs/bin/node /app/main.js; /nodejs/bin/node /proxy/main.js

解决方法

我刚看了你的Dockerfile,特别是你使用的run.sh脚本.这一行来自你的run.sh脚本:

/nodejs/bin/node /app/main.js; /nodejs/bin/node /proxy/main.js

重要的是要知道这些命令中的每一个都启动一个长期运行的服务器进程(理论上)永远运行.这意味着第二个进程(/proxy/main.js)永远不会启动,因为SHell将等待第一个进程完成.

这意味着您无法访问代理服务器,因为它永远不会启动.

基本上我可以想到两种解决方案.请注意,惯用的“Docker方式”是仅为每个容器运行一个进程.

>我建议在两个单独的容器中运行您的应用程序和代理服务器.你可以link those two containers together

docker run --name app -p 3000 <your-image> /nodejs/bin/node /app/main.js
docker run --name proxy -l app:app -p 4000:4000 <your-image> /nodejs/bin/node /proxy/main.js

标志-l app:app将导致应用程序容器与代理容器中的主机名应用程序一起使用(这可以通过在容器中创建/ etc / hosts条目来完成).这意味着,在代理容器内,您可以使用http:// app:3000来访问您的上游应用程序端口.
>另一种解决方案是使用像Supervisord这样的流程管理器工具来并行管理容器中的多个长时间运行的流程.文档中有一个good article.它基本归结为以下内容

>安装supervisord(Ubuntu中的apt-get install supervisor)
>创建配置文件(通常在/etc/supervisor/conf.d/yourapplication.conf中),您可以在其中配置需要运行的所有服务:

[supervisord]
nodaemon=true

[program:application]
command=/nodejs/bin/node /app/main.js

[program:proxy]
command=/nodejs/bin/node /proxy/main.js

>然后使用supervisord作为启动命令,例如在Dockerfile中使用CMD [“/usr/bin/supervisord”].

在这种情况下,您的两个进程都在同一个容器中运行,您可以使用http:// localhost:3000来访问您的上游应用程序.

大佬总结

以上是大佬教程为你收集整理的node.js – Docker容器中的节点http-proxy全部内容,希望文章能够帮你解决node.js – Docker容器中的节点http-proxy所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。