【问题标题】:Docker (compose) and socket io - how to link containersDocker (compose) 和 socket io - 如何链接容器
【发布时间】:2017-03-21 15:20:52
【问题描述】:

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

  • 在端口 3001 上打开 socket.io 连接并在端口 3000 上提供网页(也连接到该 socket.io 服务器)的 nodejs 服务器
  • 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 服务器?

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

【问题讨论】:

    标签: node.js docker socket.io docker-compose


    【解决方案1】:

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

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

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

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

    链接:

    链接到另一个服务中的容器。要么指定服务名称和链接别名 (SERVICE:ALIAS),要么只指定服务名称。

    链接服务的容器可以通过与别名相同的主机名访问,如果没有指定别名,则使用服务名。

    端口:

    暴露端口。要么指定两个端口 (HOST:CONTAINER),要么只指定容器端口(将随机选择主机端口)。

    公开:

    公开端口而不将它们发布到主机 - 它们只能被链接的服务访问。只能指定内部端口。

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

    【讨论】:

    • 谢谢!这里需要端口而不是暴露,因为网页在实际主机上运行,​​对吗?如果它在容器中运行,只有暴露会起作用!?而且通常“链接”只能与端口或暴露一起使用,我说对了吗?
    • @CodeO links 的使用方式没有限制,links 只需将目标服务的别名添加到容器中即可。您可以使用以下命令查看hosts 文件:docker-compose exec nodeserver cat /etc/hosts。我已经更新了portsexpose 的帖子。
    • 谢谢,我已经接受了这个答案(虽然我自己已经阅读过文档;))。好的,您可以随时使用links,这可能有助于解决依赖关系,但如果没有端口/公开,您仍然无法从其他容器访问任何内容,对吧?
    • 其实说对了一半。默认情况下,compose创建的容器对同一网络中的其他容器开放,你可以用这个gist进行测试或验证。
    猜你喜欢
    • 2018-02-11
    • 2019-04-20
    • 2018-07-21
    • 1970-01-01
    • 2016-04-16
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多