gpt4 book ai didi

docker - 如何在容器之间的 docker-compose 中连接 socket.io

转载 作者:行者123 更新时间:2023-12-02 19:29:29 27 4
gpt4 key购买 nike

我有一个在端口 4000 上提供 http 服务的容器。它连接了套接字服务器

docker 组成:

  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 输出:

服务器运行在 http://127.0.0.1:4000/

https 正在监听: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 轮询错误

当我在终端本地运行时,我得到正确的响应

{"message":"socket connection established","level":"debug"}

为什么套接字不是在容器内建立连接,而是在本地建立连接?我做错了什么?

编辑:为了便于阅读,只显示了部分文件。套接字在本地计算机上正常连接,并在不同的终端中生成两个文件

最佳答案

您需要链接 docker 容器并按名称引用它们,而不是 127.0.0.1https://docs.docker.com/compose/networking提供更多文档。您还需要收听“0.0.0.0”,以便接受跨 docker 网络的连接。

我在您的撰写文件中只看到一个容器。如果您尝试从 外部 docker 连接到 docker 容器,则必须公开一个端口。相同的引用向您展示了如何。

http.listen(4000, '127.0.0.1', () => {

应该变成

http.listen(4000, '0.0.0.0', () => {

以便服务器监听所有地址,包括 docker 在 docker 网络上自动分配的地址。

然后客户端必须通过 docker compose 中给出的名称来引用服务器,所以

const url = `ws://127.0.0.1:4000`

成为

const url = `ws://dashboard-server:4000`

关于docker - 如何在容器之间的 docker-compose 中连接 socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52895365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com