" ECONNREFUSED"在NodeJS应用程序

时间:2016-06-06 21:57:03

标签: mysql node.js docker docker-machine

我正在尝试在MAC OSX上运行的NodeJS应用程序中执行以下操作:(Docker REST API' s用于与docker交互。 API参考:https://docs.docker.com/engine/reference/api/docker_remote_api_v1.23/

  1. 创建mysql docker容器,将其端口3306映射到其中一个主机端口。这是docker容器配置POST正文:

    { 'Env': ['MYSQL_ROOT_PASSWORD=root'], 'Image': 'test-mysql', 'ExposedPorts': { '3306/tcp': {} }, 'HostConfig': { 'PortBindings': { '3306/tcp': [{}]} }

  2. 启动这个新创建的mysql docker容器。

  3. 通过检查容器从主机配置中获取docker容器端口3306主机映射。 (假设映射将mysql容器端口3306映射到主机的端口32789)
  4. 使用以下mysql npm模块https://www.npmjs.com/package/mysql创建一个mysql连接。 连接配置是:

    { host: dockerHostIp, // 192.168.99.100 -- docker host IP port: portMappingFromStep3, //32789 user: mySQLUser, password: mySQLUserPassword, database: 'mysql' }

  5. 在设置mysql连接时,按顺序运行所有这一步会引发错误。它产生以下输出:

    {
      [Error: connect ECONNREFUSED 192.168.99.100:32789]
      code: 'ECONNREFUSED',
      errno: 'ECONNREFUSED',
      syscall: 'connect',
      address: '192.168.99.100',
      port: 32800,
      fatal: true 
    }
    

    但是,如果我在建立mysql连接之前提供大约7-8秒的超时,则连接成功建立。

    不确定,这里发生了什么。我无法理解,为什么没有超时mysql连接失败。我认为这与端口映射有关。端口映射需要一些时间来设置并提供大约7秒的超时,这掩盖了映射时间。

    我正在尝试建立一个端到端测试环境,其中多个mysql容器将并行运行。连接设置的等待时间为7-8秒是一个很大的开销。

    解开这个谜团的任何帮助都会非常有帮助。 感谢

0 个答案:

没有答案