Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过在同一Docker容器中运行的脚本访问服务器_Node.js_Docker_Localhost - Fatal编程技术网

Node.js 通过在同一Docker容器中运行的脚本访问服务器

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;

我正在尝试在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 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必须由您的服务抛出。您是说,当您公开端口并从主机访问服务时,它工作正常吗?