如何停止/重新启动 docker 容器而不丢失更改?

2024-01-02

我执行了以下操作,但丢失了 Docker 容器中所有更改的数据。

  1. docker build -t <name:tag> .
  2. docker run *-p 8080:80* --name <container_name> <name:tag>
  3. docker exec(导入并处理一些文件,启动服务器来托管它们)

然后我想在不同的端口上运行它。docker stop & docker run不起作用。相反,我做了

  1. docker stop
  2. docker rm <container_name>
  3. 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(使用前将#替换为@)

如何停止/重新启动 docker 容器而不丢失更改? 的相关文章

随机推荐