Node.js 通过在同一Docker容器中运行的脚本访问服务器
我正在尝试在Docker容器中运行node.js/mocha集成测试。作为集成测试的一部分,我在子进程(例如localhost:8000)中启动web服务器,然后查询不同的URL,以查看是否一切正常(例如localhost:8000/some/file.json)——容器中的所有内容Node.js 通过在同一Docker容器中运行的脚本访问服务器,node.js,docker,localhost,Node.js,Docker,Localhost,我正在尝试在Docker容器中运行node.js/mocha集成测试。作为集成测试的一部分,我在子进程(例如localhost:8000)中启动web服务器,然后查询不同的URL,以查看是否一切正常(例如localhost:8000/some/file.json)——容器中的所有内容 var express = require('express'); var request = require('request'); request.debug = true; var port = 8000;
var express = require('express');
var request = require('request');
request.debug = true;
var port = 8000;
var app = express();
app.use('/', express.static(__dirname));
app.listen(port, function() {
console.log('server started', port);
request('http://localhost:'+port+'/package.json', function(err, response) {
console.log('err', err);
console.log('status', response.statusCode);
});
});
一切都在Docker容器外部工作,但当我在Docker内部运行时,似乎无法正确解析localhost,因此请求保留在容器内
var express = require('express');
var request = require('request');
request.debug = true;
var port = 8000;
var app = express();
app.use('/', express.static(__dirname));
app.listen(port, function() {
console.log('server started', port);
request('http://localhost:'+port+'/package.json', function(err, response) {
console.log('err', err);
console.log('status', response.statusCode);
});
});
如果不是通过localhost,如何访问运行在同一Docker容器中的服务器
例如,以下脚本在Docker容器内运行时会导致503错误
var express = require('express');
var request = require('request');
request.debug = true;
var port = 8000;
var app = express();
app.use('/', express.static(__dirname));
app.listen(port, function() {
console.log('server started', port);
request('http://localhost:'+port+'/package.json', function(err, response) {
console.log('err', err);
console.log('status', response.statusCode);
});
});
我已经尝试过几种方法,比如通过bash连接和使用curl检查服务器是否正在运行。当我将端口暴露给主机时,服务器似乎已正确启动
我在SO或Google上找到的大多数主题都是关于将主机连接到Docker的,但我在Docker中没有找到任何关于localhost的内容
非常感谢您的帮助
更新:
/etc/hosts
包含以下内容:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.3 44453c0f8f46
有几个问题。你对港口有把握吗?在本例中,您指定了8011,并使用
localhost:8000
。容器中的/ect/hosts
文件的内容是什么?我在上面的示例脚本中调整了上面的端口。在我运行的测试中(自动使用mocha或手动使用curl In cmd),端口是对齐的。同样,测试脚本在OSX上本地工作。我在上面添加了/etc/hosts
的内容。请显示您正在运行的命令以启动容器,然后启动在同一容器中运行的脚本。当您获得503时,我非常确定localhost已得到解决。503必须由您的服务抛出。你是说当你暴露端口并从主机访问服务时,它工作正常吗?有几个问题。你对港口有把握吗?在本例中,您指定了8011,并使用localhost:8000
。容器中的/ect/hosts
文件的内容是什么?我在上面的示例脚本中调整了上面的端口。在我运行的测试中(自动使用mocha或手动使用curl In cmd),端口是对齐的。同样,测试脚本在OSX上本地工作。我在上面添加了/etc/hosts
的内容。请显示您正在运行的命令以启动容器,然后启动在同一容器中运行的脚本。当您获得503时,我非常确定localhost已得到解决。503必须由您的服务抛出。您是说,当您公开端口并从主机访问服务时,它工作正常吗?