У меня есть следующие node.js скрипты:
клиент.js
const net = require('net');
const client = new net.Socket();
client.connect(9233, 'server', (error) => {
console.info('Connected to packet feed');
});
client.on('error', (err) => {
console.info(err);
})
сервер.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.





В вызове server.listen() нужно указать волшебный IPv4 «везде» адрес 0.0.0.0. Если вы укажете там localhost, он будет недоступен снаружи контейнера. (Он будет принимать соединения только из контейнера localhost, а каждый контейнер имеет свой собственный localhost.)
Пробовали ли вы использовать другой порт для локального подключения к экземпляру? попробуйте изменить левый порт на что-то, что наверняка не используется, например 15000, и снова запустите его.