如何停止/重新启动docker集装箱而不会丢失更改?
我做了以下,并丢失了我的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
那么你可以启动容器与你刚刚build立的新形象
但是如果你不想用你所做的修改来创build镜像(比如你不想把包含密码的configuration放在镜像中),你可以使用volume mount
docker run -d -P --name web -v /src/webapp:/webapp training/webapp python app.py
该命令将主机目录/ src / webapp安装到/ webapp的容器中。 如果path/ web应用程序已经存在于容器的映像中,那么/ src / webapp挂载会覆盖,但不会删除预先存在的内容。 一旦挂载被删除,内容可以再次访问。 这与mount命令的预期行为一致。
pipe理容器中的数据
每次你做一个docker run
它会旋转一个新的容器根据你的形象。 一旦容器启动,docker允许你通过docker update
改变很less的东西。 相反,您应该将数据保存在需要在容器实例之间保留的外部卷中。 例如
docker run -p 8080:80 -v app-data:/data --name <container_name> <name:tag>
容器中的卷名(app-data)和装载点(/ data)可以根据您自己的要求进行更改。 然后,当您销毁并重新启动一个新的容器时,可以将相同的卷安装在新的容器中。
- docker-compose rails with mysql
- Docker的Mysql容器根密码
- 在做任何源码(Bundler :: GemNotFound)时,无法find链轮3.6.2
- Codeception的Web驱动程序(在Docker上的Selenium)testing不能看到其他容器(尽pipe在我的开发机器?)
- 如何在docker中有“运行”命令 – 撰写类似于docker文件?
- Docker-compose:数据库是未初始化的
- 502通过Jwilder的Nginx代理访问虚拟主机时出现错误的网关
- docker不能在Windows上启动
- Windows中的Docker中的MySQL:忽略全局可写的文件