我执行了以下操作,但丢失了 Docker 容器中所有更改的数据。
docker build -t <name:tag> .
docker run *-p 8080:80* --name <container_name> <name:tag>
-
docker exec
(导入并处理一些文件,启动服务器来托管它们)
然后我想在不同的端口上运行它。docker stop
& docker run
不起作用。相反,我做了
docker stop
docker rm <container_name>
-
docker run
(参数与之前相同)
重新启动后,我看到容器中 1-3 处发生的更改消失了,必须重新运行导入。
下次我该如何正确地做到这一点?
您要做的就是从更改后刚刚停止的容器构建映像。因为您的旧命令仍然使用没有新更改的旧图像(您已在刚刚停止的容器中进行了更改,而不是在图像中)
docker commit --help
Usage: docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
Create a new image from a container's changes
docker commit -a me new_nginx myrepo/nginx:latest
然后你可以使用刚刚构建的新镜像启动容器
但是如果您不想使用所做的更改创建映像(例如您不想将包含密码的配置放入映像中),您可以使用卷挂载
docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
此命令将主机目录 /src/webapp 安装到位于 /webapp 的容器中。如果路径 /webapp 已存在于容器的映像中,则 /src/webapp 挂载会覆盖但不会删除预先存在的内容。一旦移除安装,就可以再次访问内容。这与 mount 命令的预期行为一致。
管理容器中的数据 https://docs.docker.com/engine/tutorials/dockervolumes/#/mount-a-host-directory-as-a-data-volume
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)