为何基于ubuntu镜像的不同Docker容器内部环境存在差异?
容器环境差异原因
Docker 镜像属于只读模板,容器运行过程中产生的所有改动(包括创建testfolder目录、安装依赖、修改配置等)都只会存储在当前容器独有的可写层,不会反向写入到基础ubuntu镜像中。你之前的c120809b91b5容器运行期间产生的所有自定义改动都仅属于该容器,直接用原始ubuntu镜像启动的新容器不会继承这些改动,因此环境完全不同。
为原有容器添加--add-host配置的方案
方案1:提交容器为自定义镜像后启动新容器(操作更稳妥,兼容性高)
- 停止原有容器(避免运行状态提交出现数据不一致):
docker stop c120809b91b5 - 将原有容器的可写层和基础镜像打包为自定义镜像:
docker commit c120809b91b5 custom-ubuntu:v1 - 用新镜像启动带目标参数的容器,可同步原有容器的端口映射、卷挂载等其他配置:
docker run -it --add-host=host.docker.internal:host-gateway --name ubuntuContainer-new custom-ubuntu:v1 bash - 进入新容器后可验证testfolder目录存在,且
/etc/hosts中有对应host记录即可。
方案2:直接修改原有容器配置(无需新建容器)
注意:操作前需停止Docker daemon,避免配置被动态覆盖
- 停止目标容器:
docker stop c120809b91b5 - 停止Docker服务(不同操作系统命令可对应调整):
systemctl stop docker - 执行命令获取容器完整64位ID:
docker inspect c120809b91b5 | grep Id - 进入对应容器配置目录,默认路径为
/var/lib/docker/containers/<完整容器ID>/,编辑hostconfig.json文件,找到ExtraHosts字段,将值修改为["host.docker.internal:host-gateway"] - 保存文件后重启Docker服务:
systemctl start docker - 启动原有容器:
docker start c120809b91b5,进入容器验证配置生效即可。
内容的提问来源于stack exchange,提问作者PDD
相关产品推荐
相关产品推荐

