【问题标题】:How to setup group of docker containers with the same addresses?如何设置具有相同地址的 docker 容器组?
【发布时间】:2015-04-18 01:20:36
【问题描述】:

我将在 docker 容器中安装分布式软件。可以是这样的:

container1: 172.0.0.10 - 管理节点

container2: 172.0.0.20 - 数据库节点

container3: 172.0.0.30 - UI 节点

我知道如何将容器作为一个组进行管理以及如何将它们相互链接,但是问题是 ip 信息位于许多地方(数据库等),因此当您从此类映像部署容器时,ip 会更改并且基础设施坏了。

我看到的最简单的方法是在主机上使用多个虚拟网络,因此容器将具有相同的地址但不会相互影响。但是,据我所知,目前 docker 是不可能的,因为您无法通过连接到一个物理接口的多个网桥来启动 docker 守护进程。

问题是,您能否建议如何创建这样的基础架构?谢谢。

【问题讨论】:

    标签: networking docker distributed bridge


    【解决方案1】:

    不要这样做。

    容器是短暂的,它们来来去去,将被分配新的 IP。与之抗争是个坏主意。相反,您需要弄清楚如何处理不断变化的 IP。有几种解决方案,您应该使用哪一种完全取决于您的用例。

    一些建议:

    • 您可能只需通过主机上的端口进行转发就可以逃脱。所以你的数据库总是 HOST_IP:88888 或类似的。

    • 如果您可以将环境变量放入配置文件中,或者在容器启动时动态生成配置文件,您可以使用 Docker 链接将链接容器的 IP 放入环境变量中。

    如果这些对您不起作用,您需要开始寻找更完整的解决方案,例如 ambassador patternconsul。通常,此问题称为服务发现。

    【讨论】:

    • 感谢您的回答 Adrian,恐怕它对我不起作用,因为数据库中有很多 IP 条目(即使我在 UI 中创建基础架构时添加了主机名)。所以问题是我在 docker 安装上仍然需要几个专用网络。可能我需要其他解决方案。
    【解决方案2】:

    阿德里安给出了一个很好的答案。但是如果你不能使用这种方法,你可以做接下来的事情:

    • 使用 docker 在主机上创建 ip 别名(可能是许多 docker 主机)
    • 然后您为此地址运行容器映射端口。

    .

    docker run --name management --restart=always -d -p 172.0.0.10:NNNN:NNNN management
    docker run --name db --restart=always -d -p 172.0.0.20:NNNN:NNNN db
    docker run --name ui --restart=always -d -p 172.0.0.30:NNNN:NNNN ui
    

    现在您可以通过固定地址访问您的容器,并且可以将它们移动到不同的主机(连同 IP 别名),一切都会继续工作。

    【讨论】:

    • 感谢您回答 ISanych,但问题是同一主机上会有​​很多这样的容器组,因此它们无法使用主机上的相同 ip 连接。所以唯一的办法就是为每个容器组建立专用网络。所以有可能拥有相同的ip。但是它目前在 docker 中不起作用,所以对我来说可能不是正确的解决方案:(
    猜你喜欢
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2015-01-05
    • 2016-02-26
    • 2013-09-29
    相关资源
    最近更新 更多