【发布时间】:2015-07-05 14:57:53
【问题描述】:
我有以下代码在我的本地环境中运行良好。但是,当我尝试从 Docker 容器(通过 Boot2Docker)运行相同的代码时,我根本无法访问 https://[boot2docker_ip]:4000
我尝试使用所有这些选项更新下面代码中的目标值,但似乎没有一个可以解决问题:
target: 'http://localhost:3000',target: 'http://0.0.0.0:3000',target: '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
【问题讨论】:
-
监听 3000 端口的服务在哪里运行?在您的主机上,还是在另一个 Docker 容器内?
-
在同一个 docker 容器内。我先启动这个代理,然后在端口 3000 上启动那个服务
-
我明白了。您用于启动容器的 Dockerfile 和/或
docker run命令可能很有用。 -
勾选编辑。这是供您试用的存储库:github.com/munjalpatel/node-http-proxy-test
-
好的!我编辑了您的问题以包含有问题的代码(通常,不鼓励在 SO 上使用仅链接问题和答案,因为链接往往会变得无效)并在下面起草了一个答案。如果有帮助,请告诉我!
标签: node.js docker boot2docker node-http-proxy