繁体   English   中英

通过Node.js连接到远程Docker

[英]Connect to remote Docker via Node.js

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

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

我用这个这个来设置它。

我想做的是能够通过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' }

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

这是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')
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM