我目前正在开展一个项目,我重新制作了一个在docker容器中使用的现有项目。 我有3个不同的容器:
现在我正在尝试链接这些容器,但我不确定我是否理解了docker网络。我是否正确地假设在docker-compose.yml文件中:
所以我必须始终链接并公开?这总是在两个方向都有效(socket.io消息也可以发回)?
所以这样的事情是正确的(版本3格式):
nodeserver:
ports:
-3000:3000
expose:
-3001
links:
-database
...
database:
(image mysql...)
application:
links:
-nodeserver
...
应用程序和网页现在都可以作为nodeserver:3000?
到达socket.io服务器我已经尝试过其中的一些但是还没有完全发挥作用所以我想确保先了解一切。 谢谢你的帮助!
答案 0 :(得分:2)
如果我了解您的部署体系结构,application
需要通过端口3001上的socket.io访问nodeserver
,那么您将带有nodeserver的链接添加到应用程序,它&# 39;是的。
但是nodeserver
提供的网页也连接到端口3001上的socket.io,因此浏览器无法连接端口3001上的nodeserver。
所以您只需要更改nodeserver
,如下所示:
nodeserver:
ports:
- "3000:3000"
- "3001:3001"
links:
-database
...
链接:
链接到其他服务中的容器。指定服务名称和链接别名(SERVICE:ALIAS),或仅指定服务名称。
链接服务的容器可以在与别名相同的主机名上访问,如果没有指定别名,则可以访问服务名称。
端口:
暴露端口。指定两个端口(HOST:CONTAINER),或仅指定容器端口(将选择随机主机端口)。
暴露:
暴露端口而不将它们发布到主机 - 它们只能被链接服务访问。只能指定内部端口。