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

如何停止/重新启动docker容器而不丢失更改?,docker,docker-image,Docker,Docker Image,我执行了以下操作,并丢失了Docker容器中所有更改的数据 docker build-t. docker run*-p 8080:80*--name docker exec(导入并处理一些文件,启动服务器托管它们) 然后我想在另一个端口上运行它装卸工停止和装卸工运行不工作。相反,我做到了 docker站 docker rm docker run(参数与前面相同) 重启后,我看到容器中1-3处发生的更改消失了,必须重新运行导入 下次如何正确执行此操作?每次执行docker运行时,它都会根据您的图像

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

  • docker build-t.
  • docker run*-p 8080:80*--name
  • docker exec
    (导入并处理一些文件,启动服务器托管它们)
  • 然后我想在另一个端口上运行它<代码>装卸工停止和
    装卸工运行
    不工作。相反,我做到了

  • docker站
  • docker rm
  • docker run
    (参数与前面相同)
  • 重启后,我看到容器中1-3处发生的更改消失了,必须重新运行导入


    下次如何正确执行此操作?

    每次执行
    docker运行时,它都会根据您的图像旋转一个新容器。一旦容器启动,docker允许您通过
    docker update
    更改的内容就很少了。因此,您应该将数据保存在需要在容器实例之间持久化的外部卷中。例如

    docker run -p 8080:80 -v app-data:/data --name <container_name> <name:tag>
    
    docker run-p 8080:80-v app data:/data--name
    

    可以根据您自己的要求更改容器中的卷名(应用程序数据)和装入点(/data)。然后,当您销毁并重新启动一个新容器时,您可以在新容器中装载相同的卷。

    您需要做的是从更改后刚刚停止的容器中构建映像。因为您的旧命令仍然使用旧映像,而旧映像没有新的更改(您在刚刚停止的容器中进行了更改,而不是在映像中)

    docker提交-一个新的\u 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命令的预期行为一致

    docker commit --help
    
    Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    
    Create a new image from a container's changes