蓝易云

Docker commit 镜像后数据丢失

451次阅读
没有评论

共计 1079 个字符,预计需要花费 3 分钟才能阅读完成。

一、发现问题

1、运行 tomcat

docker run -d \
--name tomcat \
-p 9999:8080 \
-v /docker/tomcat/webapps:/usr/local/tomcat/webapps \
tomcat

2、在 webapps 添加内容

cd /docker/tomcat/webapps && mkdir H1 && cd H1 && echo "hello mytomcat" > index.html

很常规的操作,将 webapps 目录挂载出来,将网页内容添加到 tomcat

3、通过容器创建镜像

我想添加内容以后,再通过 Docker commit 创建有我自己添加文件的镜像,这样下次就可以直接启动我自己的镜像,而不需要再修改。

docker commit -a "hausen1012" -m "my-tomcat" tomcat mytomcat:1.0

4、启动自己创建的镜像

docker run -d --name mytomcat -p 9998:8080 mytomcat:1.0

这里没有创建映射卷,因为我怕把我 webapps 下的内容覆盖。

5、访问 mytomcat

结果:
Docker commit 镜像后数据丢失

当我进入到容器,查看 webapps 下的内容是空的。

后来了解到原来是 Docker commit 创建镜像的时候不会将 VOLUME 外部卷里面的内容复制过去。

二、解决办法

1、检查 tomcat 的 Dockerfile

我查看 tomcat 镜像的 Dockerfilr,发现并没有指定任何的 Volume。

如果原镜像 Dockerfile 使用 VOLUME 命令制定了外部卷,则可能需要直接修改 Dockerfile 文件,创建自己的镜像了。

2、启动 tomcat

docker run -d \
--name tomcat \
-p 9999:8080 \
tomcat

注意不要映射需要添加的文件夹。

3、添加内容

# 创建添加内容
mkdir H1 && echo "hello mytomcat" > H1/index.html
# 通过 docker cp 将刚刚创建的复制进去
docker cp H1/ tomcat:/usr/local/tomcat/webapps/H1/

4、通过容器创建镜像

docker commit -a "hausen1012" -m "my-tomcat" tomcat mytomcat:2.0

5、启动自己创建的镜像

docker run -d --name mytomcat -p 9998:8080 mytomcat:2.0

这里没有创建映射卷,因为我怕把我 webapps 下的内容覆盖。

6、访问 mytomcat

成功:
Docker commit 镜像后数据丢失

总结:

通过容器创建镜像时,需要保证添加的内容不在外部映射卷下,否则不能将内容复制到新的镜像。

提醒:本文发布于817天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2022-08-28发表,共计1079字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock