У меня есть один контейнер, который обслуживает http на порту 4000. к нему подключен сервер сокетов
docker-compose:
dashboard-server:
image: enginetonic:compose1.2
container_name: dashboard-server
command: node src/service/endpoint/dashboard/dashboard-server/dashboard-server.js
restart: on-failure
ports:
- 4000:4000
integration-test:
image: enginetonic:compose1.2
container_name: integration-test
testRegex "(/integration/.*|(\\.|/)(integration))\\.jsx?$$"
tty: true
сервер:
const http = require('http').createServer(handler)
const io = Io(http)
io.on('connection', socket => {
logger.debug('socket connected')
})
io.use((socket, next) => {
logger.debug('socket connection established.')
})
http.listen(4000, '127.0.0.1', () => {
console.log(
`Server running at http://127.0.0.1:4000/`
)
вывод в Docker:
Server running at http://127.0.0.1:4000/
https is listening: true
Теперь я пытаюсь подключиться к этому серверу из другого контейнера, например:
файл:
const url = `ws://dashboard-server:4000`
const ioc = IoC.connect(url)
ioc.on('error', error => {
console.log(error.message)
})
ioc.on('connect', res => {
console.log('connect')
})
ioc.on('connect_error', (error) => {
console.log(error.message)
})
вывод:
xhr poll error
Когда я запускаю оба локально в терминале, я получаю правильный ответ
{"message":"socket connection established","level":"debug"}
Почему сокет не устанавливает соединение внутри контейнера, а локально это так?Что я делаю не так?
edit: для удобства чтения отображается только часть файлов.сокет нормально соединяется на локальной машине с порождением обоих файлов в отдельных терминалах