结论:当使用 docker commit
命令来创建一个新的 Docker 镜像时,这个命令实际上是对当前运行中的容器进行了一个快照,但是创建的镜像不包含挂载数据卷中的数据。
测试详细步骤,如下:
1、下载指定版本postgesql
docker pull postgres:12
2、查看下载好的镜像文件:docker images
3、运行镜像
把pgsql数据卷挂载在:/test/docker/postgresql/data
docker run --name pgsql --restart=always -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=db_test -p 5432:5432 -v /test/docker/postgresql/data:/var/lib/postgresql/data -d postgres:12
4:登录数据库,创建测试表:test_table,并插入一条测试数据
5:在挂载的数据卷中:/test/docker/postgresql/data,放一个测试文件
6、执行 docker commit 打包镜像:docker commit pgsql pgsql2
7、运行刚刚打包的新镜像:pgsql2,并映射到宿主机25432端口,设置数据卷位置:/test2/docker/postgresql/data
docker run --name pgsql2 --restart=always -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -p 25432:5432 -v /test2/docker/postgresql/data:/var/lib/postgresql/data -d pgsql2
8、进入到pgsql2数据库镜像创建的数据库时,没有我们前面创建的test_table表,并且挂载的路径:/test2/docker/postgresql/data 中也没有测试文件。
所以,使用 docker commit命令不打包挂载数据卷中的数据。