我在我的一台服务器上设置并运行了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' }
如何连接到我的远程主机?
答案 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')
}