如何 stop/relaunch docker 容器而不丢失更改?
How to stop/relaunch docker container without losing the changes?
我做了以下操作并丢失了我 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 run
时,它都会根据您的图像启动一个新容器。一旦容器启动,docker 允许您使用 docker update
更改的内容非常少。因此,您应该将数据保存在需要在容器实例之间持久存在的外部卷中。例如
docker run -p 8080:80 -v app-data:/data --name <container_name> <name:tag>
卷名称(app-data)和容器中的挂载点(/data)可以根据您自己的需要进行更改。然后当你销毁并重新启动一个新容器时,你可以在新容器中挂载相同的卷。
您要做的是从刚刚停止的容器构建镜像。因为您的旧命令仍在使用没有新更改的旧图像(您已经在刚刚停止的容器中进行了更改,而不是在图像中)
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
然后你可以用你刚刚构建的新镜像启动容器
但是如果你不想用你所做的更改创建镜像(比如你不想在镜像中放置包含密码的配置),你可以使用 volume mount
docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
此命令将主机目录 /src/webapp 装载到位于 /webapp 的容器中。如果路径 /webapp 已经存在于容器的图像中,/src/webapp 挂载覆盖但不会删除预先存在的内容。移除安装后,可以再次访问内容。这与 mount 命令的预期行为一致。
我做了以下操作并丢失了我 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 run
时,它都会根据您的图像启动一个新容器。一旦容器启动,docker 允许您使用 docker update
更改的内容非常少。因此,您应该将数据保存在需要在容器实例之间持久存在的外部卷中。例如
docker run -p 8080:80 -v app-data:/data --name <container_name> <name:tag>
卷名称(app-data)和容器中的挂载点(/data)可以根据您自己的需要进行更改。然后当你销毁并重新启动一个新容器时,你可以在新容器中挂载相同的卷。
您要做的是从刚刚停止的容器构建镜像。因为您的旧命令仍在使用没有新更改的旧图像(您已经在刚刚停止的容器中进行了更改,而不是在图像中)
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
然后你可以用你刚刚构建的新镜像启动容器
但是如果你不想用你所做的更改创建镜像(比如你不想在镜像中放置包含密码的配置),你可以使用 volume mount
docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
此命令将主机目录 /src/webapp 装载到位于 /webapp 的容器中。如果路径 /webapp 已经存在于容器的图像中,/src/webapp 挂载覆盖但不会删除预先存在的内容。移除安装后,可以再次访问内容。这与 mount 命令的预期行为一致。