Docker 如何启动具有主机名和ip地址的容器,以便它们连续运行?
下面是docker compose配置示例,用于启动一个简单的目录列表服务(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,第二个容器的主机名为
dirlist
):
我想创建dirlist
的副本,这样生成的每个容器都有以下内容:
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"