共计 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
结果:
当我进入到容器,查看 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
成功:
总结:
通过容器创建镜像时,需要保证添加的内容不在外部映射卷下,否则不能将内容复制到新的镜像。
提醒:本文发布于833天前,文中所关联的信息可能已发生改变,请知悉!
AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完