【问题标题】:Docker container restart without data lossDocker容器重启不丢失数据
【发布时间】:2016-08-17 01:23:50
【问题描述】:

我使用Rancher 作为编排工具。我在容器中安装了一个节点 Cassandra 并想重新启动它,因为我最近对配置文件(cassandra.yaml)进行了一些更改。数据库中已经有数据,所以想防止数据丢失。我使用usman/docker-rancher-cassandra:3.1 图像。应该使用哪个命令来执行此操作?

【问题讨论】:

    标签: docker cassandra rancher


    【解决方案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 inspect 获取卷路径。

    docker inspect <container_name>
    

    您可以在重新创建容器之前将数据从/var/lib/docker/volumes/531419fb27d1dff9c5371769edc08d6160f71061c9fe3af05309a3a0c51bb84d/_data 复制到其他目录。您需要在使用

    启动新容器时挂载该目录

    docker run -v &lt;HOST_PATH&gt;:/var/lib/cassandra

    【讨论】:

    • 有没有办法从容器中导出数据,重启后导入?我没有明确安装它。
    • @KovacsAkos,更新了从容器中恢复数据的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多