通过Node.js连接到远程Docker

时间:2014-09-07 04:02:26

标签: node.js coffeescript docker

我在我的一台服务器上设置并运行了Docker,可以像这样远程连接到它:

docker --tlsverify -H tcp://web2.webcom.dk:4243 images

我使用thisthis来设置它。

我想做的是能够通过Node.js连接到它并尝试使用dockerode,这对我来说似乎是最好的选择。

这是我的代码:

Docker = require 'dockerode'

docker = new Docker
  host: 'tcp://web2.webcom.dk'
  port: 4243
  tls: true
  tlscacert: '/Users/jacob/.docker/ca.pem'
  tlscert: '/Users/jacob/.docker/cert.pem'
  tlskey: '/Users/jacob/.docker/key.pem'
  tlsverify: true

container = docker.getContainer '826544226fdc'
container.start (err, data) ->
  return console.error err if err?
  console.log data

但这不起作用,因为我收到此错误:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

有什么想法吗?

更新

这适用于本地:

Docker = require 'dockerode'

docker = new Docker
  host: '192.168.59.103'
  port: 2375
  socketPath: false

docker.run 'ubuntu', ['bash', '-c', 'uname -a'], process.stdout, (err, data, container) ->
  return console.error err if err?

但如果我使用我的远程主机IP和端口,我会得到这个:

{ [Error: Parse Error] bytesParsed: 0, code: 'HPE_INVALID_CONSTANT' }

如何连接到我的远程主机?

1 个答案:

答案 0 :(得分:5)

这是HTTP PARSER ERROR,因为您的dockerd会使用HTTPS来表示您正在使用HTTP来连接它。 如果使用tls,则必须将prococol字段设置为https。这是我的配置:

docker: {
  host: '192.168.59.103'
  port: 2376
  protocol: 'https'
  ca: fs.readFileSync(process.env.DOCKER_CERT_PATH + '/ca.pem')
  cert: fs.readFileSync(process.env.DOCKER_CERT_PATH + '/cert.pem')
  key: fs.readFileSync(process.env.DOCKER_CERT_PATH + '/key.pem')
}