我有以下node.js
脚本:
client.js
const net = require('net');
const client = new net.Socket();
client.connect(9233, 'server', (error) => {
console.log('Connected to packet feed');
});
client.on('error', (err) => {
console.log(err);
})
server.js
const net = require('net');
const server = net.createServer((socket) => {
});
server.listen(9233, 'localhost');
以及以下docker-compose.yaml
version: '3'
services:
server:
build: .
volumes:
- ./:/usr/src/app
command: node server.js
ports:
- "9233:9233"
client:
build: .
volumes:
- ./:/usr/src/app
environment:
command: node clients.js
links:
- server
depends_on:
- server
如果我在计算机上运行node server.js
和node client.js
,它们将成功连接。
但是如果我运行docker-compose up
,则会收到以下错误消息:
client_1 | Error: connect ECONNREFUSED 172.26.0.2:9233
client_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1056:14) {
client_1 | errno: 'ECONNREFUSED',
client_1 | code: 'ECONNREFUSED',
client_1 | syscall: 'connect',
client_1 | address: '172.26.0.2',
client_1 | port: 9233
client_1 | }
我在做什么错?
我已经尽力了,包括docker-compose run --service-ports
而不是docker-compose up
。
答案 0 :(得分:1)
在server.listen()
调用中,您需要指定魔术IPv4“无处不在”地址0.0.0.0。如果在此处指定localhost
,则将无法从容器外部访问它。 (它将仅接受来自容器的localhost
的连接,并且每个容器都有自己的localhost
。)