因为docker容器自带Hosts文件,宿主机修改hosts文件容器内不同步,会给开发和测试带来麻烦,想要同步宿主机hosts文件主要有三种方式:
1. 直接在容器内修改
# 查看所有容器
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a4cc0829c07 ghcr.io "/init" 23 hours ago Up 23 hours noname
# 进入容器
docker exec -it 8a4cc0829c07 bash
# 修改内部hosts文件
vi /etc/hosts
# 刷新
systemctl restart nscd
弊端:操作繁琐,存在缓存,hosts更新不及时。
2. 在docker启动命令中添加hosts
docker run -d \
--name=noname \
-e TZ=Asia/Shanghai \
-p 16881:16881 \
--add-host=reddit:8.8.8.8 \
--restart unless-stopped \
noname
弊端:每次修改hosts需要删除容器,重新启动容器,对不能停止运行的业务不适用;如果配置文件不映射到宿主机会带来配置的时间成本。
3. 使用host模式对宿主机hosts文件进行映射
docker run -d \
--name=noname \
-e TZ=Asia/Shanghai \
--add-host=reddit:8.8.8.8 \
--network=host \
--restart unless-stopped \
noname