gpt4 book ai didi

node.js - Docker (compose) 和套接字 io - 如何链接容器

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:13 25 4
gpt4 key购买 nike

我目前正在开发一个项目,我将重新制作一个现有项目以在 docker 容器中使用。我有 3 个不同的容器:

  • 一个nodejs服务器,在端口3001上打开socket.io连接并在端口3000上提供网页(也连接到该socket.io服务器)
  • nodejs 后端所需的 MySQL 数据库
  • 一个通过 socket.io 向服务器发送数据的小应用程序

现在我正在尝试链接这些容器,但我不确定我是否正确理解了 docker 网络。我在 docker-compose.yml 文件中的假设是否正确:

  • 端口:向主机公开端口(以及向所有其他/所有链接的容器?)
  • links:设置启动顺序并允许一个容器使用另一个容器的公开端口,主机名 = 容器名
  • expose:仅向所有链接的容器公开端口(不是主机,也不是未链接的容器)

所以我必须始终链接和公开?这是否总是双向工作(socket.io 消息也可以发回)?

这样的东西是否正确(版本 3 格式):

nodeserver:
ports:
-3000:3000
expose:
-3001
links:
-database
...

database:
(image mysql...)

application:
links:
-nodeserver
...

应用程序和网页现在都可以作为 nodeserver:3000 到达 socket.io 服务器吗?

我已经尝试了其中一些,但还没有完全发挥作用,所以我想确保首先理解所有内容。感谢您的帮助!

最佳答案

如果我了解您的部署架构,应用程序需要通过端口3001上的socket.io访问nodeserver,因此您添加一个链接 Node 服务器到应用程序,这是正确的。

但是nodeserver提供的网页也连接到端口3001上的socket.io,因此浏览器无法连接端口3001上的nodeserver。

所以你只需要更改nodeserver如下:

nodeserver:
ports:
- "3000:3000"
- "3001:3001"
links:
-database
...

链接:

Link to containers in another service. Either specify both the service name and a link alias (SERVICE:ALIAS), or just the service name.

Containers for the linked service will be reachable at a hostname identical to the alias, or the service name if no alias was specified.

端口:

Expose ports. Either specify both ports (HOST:CONTAINER), or just the container port (a random host port will be chosen).

暴露:

Expose ports without publishing them to the host machine - they’ll only be accessible to linked services. Only the internal port can be specified.

查看更多详情:https://docs.docker.com/compose/compose-file

关于node.js - Docker (compose) 和套接字 io - 如何链接容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42931234/

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