这里是示例docker compose配置,用于调出简单的目录列表服务(dirlist
):
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"
我想创建dirlist
的副本,以便产生的每个容器都具有以下内容:
172.19.0.10
,第二个容器必须具有IP地址172.19.0.11
,第三个容器-172.19.0.12
,依此类推...从范围中随机选择IP地址也是可以的,但是,#3要求也必须相识。dirlist1
,第二个容器的主机名是dirlist2
,依此类推dirlist
的所有此类容器也应显示为extra_hosts
(及其相应的名称和IP地址),这取决于dirlist
(即,根据示例为curlcmd
)。extra_hosts
。也就是说,使用单个副本,这个简短得多的Compose文件就可以正常工作:version: "3"
services:
dirlist:
image: ubuntu-python
curlcmd:
image: ubuntu-curl
command: curl -s http://dirlist:8000/readme1.txt
我依靠现成的Compose提供的default
网络,假设您要运行的文件已COPY
放入Docker映像中,并且还假定Dockerfile具有正确的[C0 ] 已经。我跳过了所有的WORKDIR
设置,以使用默认设置,并且不需要特别设置每个容器networks:
(它在容器自身外部不做任何可见的操作)。单独编写并不直接支持复制服务。如果将此功能与Docker的Swarm集群服务结合使用,则可以为
hostname:
服务指定replicas:
,我认为这基本满足您的要求,但是对于单个主机,您可能不想设置Swarm。您可以做的另一件事是使用文本模板工具创建
replicas:
文件。例如,使用dirlist
,我可能会写:
docker-compose.yml
在Compose中,Jinja容器无法发现有多少个副本,尽管如果知道它们遵循此特定模式,则可以简单地遍历主机名,直到失败为止。