docker持久化保存容器

每次使用docker run 命令会创建一个新的容器,而不是使用已有的容器。因此,当你关闭这个容器后,它不会自动保留修改的内容。

当我们在容器中对代码进行了修改,退出该容器后,你会遇到几个问题:

一.不知道上一次运行容器的名字,因为在使用docker run 创建容器时没有指定名字,导致每次使用docker run 命令就重新创建了一个新的容器。

二,退出容器后数据无法保持,导致你代码白写,因为没有没有挂载容器的数据卷到本机。

解决方法

1,停止之前创建的所有容器:

docker stop $(docker ps -aq)

2.删除所以容器

docker rm $(docker ps -aq)

3.宿主机上创建一个用于映射到容器的卷,将要映射到容器中的文件夹复制过来

mkdir /home/cennum/container_ws/cyberdog_sim

这个本地目录对应容器的cyberdog_sim中的文件,所以,先开一个cyberdog_sim:v2镜像创建的容器,将容器内/home/cyberdog_sim复制到宿主机的/home/cennum/container_ws/cyberdog_sim目录

sudo docker cp <新开的容器名>:/home/cyberdog_sim /home/cennum/container_ws

成功后移除停止并移除所有容器

4.创建一个新的容器,并且指定 –name <名字>,指定要挂载数据的映射关系 -v <本机的目录>:<容器内的目录>

sudo docker run -it --name cyberdog_container --privileged=true -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v /home/cennum/container_ws/cyberdog_sim:/home/cyberdog_sim cyberdog_sim:v2

以上这个命令中

–name 指定了创建的这个容器的名字为cyberdog_container,

-v 指定将容器中的/home/cyberdog_sim目录映射到宿主机的/home/cennum/container_ws/cyberdog_sim目录,中间使用:分隔

这样就创建了一个叫cyberdog_container的容器,并且指定映射卷关系。

5.下次再进入该容器数据不会丢失

docker start -ai cyberdog_container

注意,对容器中的/home/cyberdog_sim的修改就是对宿主机/home/cennum/container_ws/cyberdog_sim的修改


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注