【问题标题】:Can we have two or more container running on docker at the same time我们可以同时在 docker 上运行两个或多个容器吗
【发布时间】:2019-01-17 11:41:25
【问题描述】:

我还没有对 docker 和容器做任何实际操作,但据我所知。

根据在线提供的文档,我没有得到有关同时运行的两个或多个容器的详细信息。

Docker 允许容器将容器的端口地址映射到主机。 现在,问题是我们可以在 docker 上同时运行多个容器吗?如果是,那么如果两个容器映射到相同的端口号,那么在这种情况下如何处理端口?

同样出于好奇,docker上的两个容器可以互相通信吗?

【问题讨论】:

    标签: docker containers microservices


    【解决方案1】:

    是的,您可以在单个主机上运行多个容器; docker 正是为此而设计的。

    你不能将两个不同镜像的容器映射到同一个端口号;如果您尝试,您会收到错误响应。但是,如果您的容器运行相同的映像(例如 webapp 的 2 个实例),您可以将它们作为服务运行,并将它们暴露在同一个端口上。 Docker 将对请求进行负载平衡。你可以阅读更多关于services here或关注Get Started (Part 3, services) here

    是的,单个主机上的容器可以通过容器名称相互通信。例如,如果您有一个运行 MongoDB 的容器称为 mongo,另一个运行 Node.js 的容器称为 webserver,则 webserver 容器可以使用名称 mongo 连接到数据库,例如db.Connect("mongodb://mongo:27017/testdb").

    【讨论】:

      【解决方案2】:

      我们可以在主机上一次运行多个 Docker,但是是的,我们会遇到将同一个端口绑定到 docker 的限制;所以要解决这个问题,我们需要将主机中的不同端口绑定到 docker,如果你正在运行 mongo-db,那么它的默认端口是 27017,所以我们可以运行两个 mongo-db 作为 -p 27017:27017 用于 Docker D1 和 -p 27018:27017 用于 Docker D2 和 5000:27017 用于 Docker D3;像这样,您可以绑定不同的主机端口以映射到 27017 用于 mongo-db 端口;现在您的问题是如何从主机管理这些端口,那么我建议您使用 nginx 在主机中进行端口管理。

      关于您的下一个问题,所有 docker 都连接到默认的 docker0 网桥网络,因此我们可以连接到连接到默认网桥“docker0”网络的任何 docker;如果我是对的,它将带有 172.x.x.x 网络的 ipaddress。进入 docker 并运行 'ip addr' 以查看分配给 docker 的 IP 地址,您可以通过运行 ping 命令测试连接。

      【讨论】:

      • 我正在尝试使用 ghost 进行此操作,但无法连接到映射到不同主机端口的第二个实例。
      【解决方案3】:

      是的,两个容器可以同时运行,它们也可以相互通信,你可以定义自己的网络,它们可以相互通信。如果两个容器有自己的私有端口,它们是它们的内部端口,一个容器端口不会与另一个容器端口发生冲突。如果您想向主机公开端口,则必须发布端口。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        相关资源
        最近更新 更多