【问题标题】:Why docker-compose starts a new IP address?为什么 docker-compose 启动一个新的 IP 地址?
【发布时间】:2019-03-18 21:26:11
【问题描述】:

每次我启动 docker-compose 机器时,它都会从一个新的 IP 地址开始,我想知道一些事情:

  • 为什么?
  • 它如何知道它已经使用了 Ip .0 并跳转到 .1 再跳转到 .2 等等?
  • 有没有办法说:嘿,不要从 IP x 移动?

谢谢

我希望你能回答为什么,因为它可以解释其他人。请参阅有关它的文档。谢谢

【问题讨论】:

  • 因为 docker 就是这样设计的。或许描述一下这给您带来的问题,以便我们帮助您解决这个问题。

标签: docker docker-compose


【解决方案1】:

这方面的最佳文档涉及技术细节。 docker中的联网是用libnetwork实现的,IP地址分配是通过IPAM来完成的。这记录在:https://github.com/docker/libnetwork/blob/master/docs/ipam.md

容器根据设计从网络池中获取一个新的 IP 地址,这是一个有用的设计。如果可以避免的话,您也不希望另一个容器突然出现与您之前连接的容器的相同 IP 地址。这最多可能导致错误,或者最坏的情况是恶意冒充容器。

每次 compose 创建一个新容器时,即使是对现有映像的小幅更新或对需要重新创建的容器属性的更改,它也会通过 docker API 创建一个新容器,然后通过 IPAM 进程从子网范围中获取新的 IP 地址。

最重要的是,这些都不重要。如果您使用 IP 地址在您的应用程序之间进行通信,您的应用程序可能还没有准备好使用容器。在容器之间,您应该至少使用 DNS,并且最好使用 swarm 模式 VIP 或 kubernetes 服务,它们可以更好地处理短期容器和滚动更新。 DNS 结果很容易因其缓存属性而过时,指向不再运行的容器。无论您使用 DNS 还是 VIP/服务,都将这留给容器运行时/编排工具来为您处理,并且只需让您的应用程序解析服务的名称,而不是直接依赖 IP 地址。

【讨论】:

  • 谢谢你回答@Bmith。你能补充一些关于问题 3 的内容吗?因为我找不到如何清除 Ip 192.168.99.100 以便 docker 可以再次使用它(没有共谋案例)。还是您更喜欢我打开一个关于如何 ReleaseAddress(此 API 用于释放 IP 地址)和 ReleasePool 的新问题。我在您提到的文档中找不到如何操作?再次感谢。
  • sergkondr 的回答涵盖了如何使用 compose。还有stackoverflow.com/a/39498534/596285
  • 是否可以从 Docker 工具箱中使用命令执行此操作?再次感谢
【解决方案2】:

BMitch 给出了为什么它会这样工作的答案,这是我的 docker compose 与硬编码 IP 的示例。我相信,这不是好的做法,但在我的情况下,这是允许的解决方案(它是实验室环境):

version: '2'

services:
  consul:
    container_name: consul
    image: consul:1.4.2
    networks:
      consul-dns:
        ipv4_address: 172.31.255.10
    environment:
      CONSUL_ALLOW_PRIVILEGED_PORTS: 1
    volumes:
      - ./config:/consul/config
      - ./data:/consul/data
    restart: on-failure
    command: "agent -data-dir=/consul/data -config-dir=/consul/config -dev -client 0.0.0.0"

networks:
  consul-dns:
    driver: bridge
    ipam:
      config:
        - subnet: 172.31.255.0/24
          gateway: 172.31.255.1

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    相关资源
    最近更新 更多