Docker 容器在没有数据丢失的情况下重启
Docker container restart without data loss
我正在使用 Rancher
作为编排工具。我在容器中安装了一个节点 Cassandra
并想重新启动它,因为我最近对配置文件 (cassandra.yaml
) 进行了一些更改。数据库中已有数据,所以要防止数据丢失。我使用 usman/docker-rancher-cassandra:3.1
图片。应该使用哪个命令来执行此操作?
重启容器不会影响容器中的数据。如果您尝试使用新图像重新创建容器,您可能会丢失数据。
如果您使用卷,您的数据将保留在主机中。这取决于您是如何启动容器的。您可以从 docker inspect <container_name>
.
查看音量信息
通过查看您正在使用的 dockerfile,cassandra 数据目录是一个卷。
VOLUME /var/lib/cassandra
如果您使用
显式安装容器卷
docker run -d -v <HOST_PATH>:/var/lib/cassandra usman/docker-rancher-cassandra:3.1
然后就可以用新版本升级容器了。否则,您需要在重新创建容器之前从目录中复制数据。
解决方案 1:
从现有容器的卷启动另一个容器。
docker stop cassandra
docker run -it --volumes-from cassandra \
--name="cassandra-new" \
usman/docker-rancher-cassandra:3.1
如果一切正常,删除之前的容器并重命名容器
docker rm cassandra
docker rename cassandra-new cassandra
解决方案 2:
docker 检查以获取卷路径。
docker inspect <container_name>
您可以在重新创建容器之前将数据从 /var/lib/docker/volumes/531419fb27d1dff9c5371769edc08d6160f71061c9fe3af05309a3a0c51bb84d/_data
复制到其他目录。您需要在使用
启动新容器时挂载该目录
docker run -v <HOST_PATH>:/var/lib/cassandra
我正在使用 Rancher
作为编排工具。我在容器中安装了一个节点 Cassandra
并想重新启动它,因为我最近对配置文件 (cassandra.yaml
) 进行了一些更改。数据库中已有数据,所以要防止数据丢失。我使用 usman/docker-rancher-cassandra:3.1
图片。应该使用哪个命令来执行此操作?
重启容器不会影响容器中的数据。如果您尝试使用新图像重新创建容器,您可能会丢失数据。
如果您使用卷,您的数据将保留在主机中。这取决于您是如何启动容器的。您可以从 docker inspect <container_name>
.
通过查看您正在使用的 dockerfile,cassandra 数据目录是一个卷。
VOLUME /var/lib/cassandra
如果您使用
显式安装容器卷docker run -d -v <HOST_PATH>:/var/lib/cassandra usman/docker-rancher-cassandra:3.1
然后就可以用新版本升级容器了。否则,您需要在重新创建容器之前从目录中复制数据。
解决方案 1:
从现有容器的卷启动另一个容器。
docker stop cassandra
docker run -it --volumes-from cassandra \
--name="cassandra-new" \
usman/docker-rancher-cassandra:3.1
如果一切正常,删除之前的容器并重命名容器
docker rm cassandra
docker rename cassandra-new cassandra
解决方案 2:
docker 检查以获取卷路径。
docker inspect <container_name>
您可以在重新创建容器之前将数据从 /var/lib/docker/volumes/531419fb27d1dff9c5371769edc08d6160f71061c9fe3af05309a3a0c51bb84d/_data
复制到其他目录。您需要在使用
docker run -v <HOST_PATH>:/var/lib/cassandra