要在Docker Compose中为服务分配固定的IP地址,你需要在docker-compose.yml文件中定义网络,并在服务的networks配置中指定IP地址。以下是一个示例,演示如何为两个服务分配固定的IP地址:

version: '3.9'
services:
  web:
    image: nginx:latest
    networks:
      my-bridge-network:
        ipv4_address: 172.20.0.3

  db:
    image: postgres:latest
    networks:
      my-bridge-network:
        ipv4_address: 172.20.0.4

networks:
  my-bridge-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
          gateway: 172.20.0.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
解释:
  1. 网络定义 (networks):
  • my-bridge-network: 定义了一个名为my-bridge-network的桥接网络。
  • driver: bridge: 指定该网络类型为桥接。
  • ipam: 定义了IP地址管理器。
  • config: 配置了子网和网关信息。
  • subnet: 设置了网络的子网范围,这里是172.20.0.0/16
  • gateway: 设置了网络的网关地址,这里是172.20.0.1
  1. 服务定义 (services):
  • web: 使用Nginx镜像。
  • db: 使用Postgres镜像。
  • networks: 每个服务都指定了加入my-bridge-network网络,并且分配了固定的IPv4地址。
  • web服务分配了172.20.0.3
  • db服务分配了172.20.0.4

这样配置后,web服务将拥有固定IP地址172.20.0.3,而db服务将拥有固定IP地址172.20.0.4。这些服务现在可以在同一网络内通过这些IP地址进行通信。

注意事项:
  • 确保为服务分配的IP地址位于定义的子网范围内。
  • 如果需要更多服务或者不同的子网,请相应地扩展配置。
  • 当服务启动时,如果指定了的IP地址已被占用,则Docker Compose会报错。确保所选的IP地址不会与其他服务冲突。
  • 如果你的主机或Docker环境已经存在与所定义子网重叠的网络配置,可能会遇到问题。确保所选的子网不与现有网络重叠。

这就是如何在Docker Compose中定义并使用带有自定义IP地址的桥接网络的方法。