docker(撰写)和套接字io – 如何链接容器
我目前正在做一个项目,在那里我重做一个现有的项目,在docker集装箱中使用。 我有3个不同的容器:
- 一个nodejs服务器,它在端口3001上打开一个socket.io连接,并在端口3000上提供一个网页(也连接到该socket.io服务器)
- nodejs后端所需的MySQL数据库
- 一个通过socket.io发送数据到服务器的小应用程序
现在我试图链接这些容器,但是我不确定是否理解了dockernetworking。 我正确地认为在一个docker-compose.yml文件中:
- 端口:将端口暴露给主机(以及所有其他/所有链接的容器?)
- 链接:设置启动顺序,并允许一个容器使用者相互暴露的端口,hostname = containername
- 揭露:只暴露端口到所有链接的容器(不是主机,而不是未链接的容器)
所以我必须经常链接和揭露? 这是否总是工作在双向(socket.io消息可以发回)?
所以这样的事情是正确的(版本3格式):
nodeserver: ports: -3000:3000 expose: -3001 links: -database ... database: (image mysql...) application: links: -nodeserver ...
现在应用程序和网页是否可以作为nodeserver:3000到达socket.io服务器?
我已经尝试了一些,但没有得到充分的工作,所以我想先确定一切。 谢谢你的帮助!
如果我了解了您的部署体系结构,则application
需要通过端口3001上的socket.io访问nodeserver
,因此您将与nodeserver的链接添加到应用程序,这是正确的。
但是, nodeserver
服务的网页也连接到端口3001上的socket.io,因此浏览器无法连接端口3001上的nodeserver。
所以你只需要改变nodeserver
如下:
nodeserver: ports: - "3000:3000" - "3001:3001" links: -database ...
链接:
链接到另一个服务中的容器。 请指定服务名称和链接别名(SERVICE:ALIAS),或者仅指定服务名称。
链接服务的容器将可以在与别名相同的主机名上访问,如果没有指定别名,则可以访问服务名称。
端口:
公开港口。 既可以指定两个端口(HOST:CONTAINER),也可以指定容器端口(将select一个随机的主机端口)。
暴露:
公开端口而不将它们发布到主机 – 它们只能被链接的服务访问。 只能指定内部端口。
查看更多详细信息: https : //docs.docker.com/compose/compose-file