每次使用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的修改
发表回复