Docker 如何启动具有主机名和ip地址的容器,以便它们连续运行?

Docker 如何启动具有主机名和ip地址的容器,以便它们连续运行?,docker,docker-compose,docker-container,docker-networking,Docker,Docker Compose,Docker Container,Docker Networking,下面是docker compose配置示例,用于启动一个简单的目录列表服务(dirlist): 我想创建dirlist的副本,这样生成的每个容器都有以下内容: ip地址应该是串行的。例如,第一个容器必须具有ip地址172.19.0.10,第二个容器必须具有ip地址172.19.0.11,第三个容器必须具有ip地址172.19.0.12,等等……从一个范围中随机选择ip地址也可以,但是,也应满足#3要求 它们的主机名也应该具有串行模式-例如第一个容器的主机名为dirlist1,第二个容器的主机名为

下面是docker compose配置示例,用于启动一个简单的目录列表服务(
dirlist
):

我想创建
dirlist
的副本,这样生成的每个容器都有以下内容:

  • ip地址应该是串行的。例如,第一个容器必须具有ip地址
    172.19.0.10
    ,第二个容器必须具有ip地址
    172.19.0.11
    ,第三个容器必须具有ip地址
    172.19.0.12
    ,等等……从一个范围中随机选择ip地址也可以,但是,也应满足#3要求
  • 它们的主机名也应该具有串行模式-例如第一个容器的主机名为
    dirlist1
    ,第二个容器的主机名为
    dirlist2
    ,等等
  • 对于依赖于
    dirlist
    (例如
    curlcmd
    )的服务,所有此类容器(属于
    dirlist
    )也应显示为
    extra_主机(及其相应的名称和ip地址)

  • 您描述的所有网络功能:它可以在一定范围内分配IPv4地址(每个Docker专用网络具有唯一的CIDR块),并提供内部DNS系统,以便服务名称可以直接用作主机名,而无需指定
    额外的\u主机
    。也就是说,对于单个复制副本,这个更短的合成文件可以正常工作:

    版本:“3”
    服务:
    目录:
    图片:ubuntu python
    curlcmd:
    图片:UbuntuCurl
    命令:curl-shttp://dirlist:8000/readme1.txt
    
    我依赖于现成的Compose提供的
    默认
    网络,假设您要运行的文件已
    复制到Docker映像中,并且假设Dockerfile已具有正确的
    WORKDIR
    。我跳过了所有的
    网络:
    设置以使用默认设置,并且没有特别需要设置每个容器的
    主机名:
    (它在容器本身之外不做任何可见的事情)

    Compose本身并不直接支持复制服务。如果您将其与Docker的Swarm cluster服务一起运行,您可以指定
    dirlist
    服务,我认为这基本上满足您的要求,但对于单个主机,您可能不希望设置Swarm

    您可以做的另一件事是使用文本模板工具创建
    docker compose.yml
    文件。例如,使用,我可能会写:

    版本:“3”
    服务:
    {%-对于范围(1,6)%}
    目录列表{{i}}:
    图片:ubuntu python
    {%-endfor%}
    curlcmd:
    图片:UbuntuCurl
    命令:curl-shttp://dirlist1:8000/readme1.txt
    
    在Compose中,
    curlcmd
    容器无法发现有多少副本,但如果它知道它们遵循此特定模式,它可以简单地遍历主机名,直到失败

    version: "3"
    services:
      dirlist:
        image: ubuntu-python
        networks:
          app_net:
            ipv4_address: "172.19.0.10"
        hostname: maca
        volumes:
          - /home/arun/misc:/misc
        working_dir: /misc
    
      curlcmd:
        image: ubuntu-curl
        command: curl -s http://maca:8000/readme1.txt
        extra_hosts:
          - "maca:172.19.0.10"
        depends_on:
          - web
        networks:
          app_net:
    
    networks:
      app_net:
        ipam:
           driver: default
           config:
             - subnet: "172.19.0.0/24"