使用Docker Compose一次性添加多个映射IP和主机到/etc/hosts

213次阅读
没有评论

问题描述

在使用Docker扩展我的服务时,我知道有一个命令叫做--add--host,可以将主机添加到/etc/hosts文件中。然而,我有一堆主机需要添加,通过逐个启动Docker来添加实在太长了。比如下面这种方式:

docker run -it \
  --add-host=testing1.example.com:10.0.0.1 \
  --add-host=testing2.example.com:10.0.0.2 \
  --add-host=testing3.example.com:10.0.0.3 \
  ...

因此,我想创建一个函数来读取一个映射文件,来解决这个问题。文件格式如下所示:

host-list

14.64.65.3 A
11.64.65.18 B
12.64.65.23 C
13.10.200.63 D
13.10.5.77 E
14.10.5.72 F
15.10.5.81 G
...

我对Shell脚本比较陌生,不知道从何开始。

解决方案

请注意以下操作可能存在版本差异及修改前做好备份。

使用Docker Compose的”extra_hosts”标签

如果你想一次性添加多个映射IP和主机到/etc/hosts文件,可以尝试使用Docker Compose以及其中的”extra_hosts”标签。在Docker Compose规范中有详细描述,你可以在这里找到:https://docs.docker.com/compose/compose-file/

version: '3'
services:
  your_service:
    image: your_image
    extra_hosts:
      - "testing1.example.com:10.0.0.1"
      - "testing2.example.com:10.0.0.2"
      - "testing3.example.com:10.0.0.3"
      ...

在上述示例中,我们使用Docker Compose定义了一个名为your_service的服务,并在其中使用了”extra_hosts”标签。通过将需要的主机名和IP地址对以列表形式添加到”extra_hosts”标签中,可以实现一次性添加多个映射到/etc/hosts文件中。

请注意,”extra_hosts”标签的使用需要使用Docker Compose来启动容器,而不是直接使用docker run命令。

使用Shell脚本实现

如果你更倾向于使用Shell脚本来实现,可以按照以下步骤来操作。下面是一个简单的Shell脚本示例,用于逐行读取host-list文件,并根据每行的内容生成--add-host的参数:

#!/bin/bash
# 读取host-list文件的每一行
while IFS= read -r line; do
  # 提取IP和主机名
  ip=$(echo "$line" | awk '{print $1}')
  host=$(echo "$line" | awk '{print $2}')
  # 使用--add-host参数添加到Docker命令
  docker_command+=" --add-host=$host:$ip"
done < host-list

# 启动Docker容器,并添加映射
docker run -it $docker_command your_image

在上述示例中,我们首先使用while循环逐行读取host-list文件,然后使用awk命令提取出IP和主机名。接着,将每个映射添加到docker_command变量中。最终,使用docker run命令启动Docker容器,并将docker_command变量中的映射添加到容器中。

请注意,这只是一个简单的示例,实际情况可能会更复杂。你可以根据需要进行修改和扩展。

无论你选择哪种方式,都能实现一次性添加多个映射IP和主机到/etc/hosts文件的目标。

希望这些解决方案能够帮助你解决问题!如果你还有其他问题,欢迎继续提问。

正文完