{{tag>mastodon manimani.cc}} # mastodon の postgres と redis の永続化 放っとくと docker コンテナの中にデータ持っちゃうやつですね。対応したつもりだったんですが……対応できてませんでしたオチ。 ## なぜか mastodon\_db\_1 も mastodon\_redis\_1 も、基本的にコンテナが再作成されないでずっと使い回されるんですよね。なので1回消してやる必要があったのかなぁとか思ってます。 ## あんまりよくわかってないけど手順 うまくいく保証はできませんし、データ吹っ飛ばす覚悟はしといてくださいね。今回は redis ですが postgres でも同じようなもんだと思います。 ### 永続化設定 docker-compose.yml のコメントを外して好きなパスにする。 redis: restart: always image: redis:alpine ### Uncomment to enable REDIS persistance volumes: - ./redis/data:/data ### コンテナ内のデータ救出 まずデータの更新を止めて ``` # docker-compose pause ``` `docker cp` でデータを吸い出します。 ``` # docker cp mastodon_redis_1:/data ./redis/ ``` ### コンテナ削除 一度停止して ``` # docker-compose unpause && docker-compose stop ``` コンテナを削除します。 ``` # docker rm mastodon_redis_1 ``` ちょっと隙が大きくてデータ更新されちゃうかもですけどまぁしょうがない。ちなみにサラッと書いてますが `docker rm` した時点でデータ吹っ飛ぶので、`docker cp` の結果だけはしっかり確認して、なんなら確保したデータをどこかにバックアップしておいてくださいね。 ### コンテナ再作成 ここ、ちょっとまだ理解不足なんですけど、基本的に再起動すれば勝手に redis コンテナ作ってくれますよね? ``` # docker-compose up -d ``` `docker-compose build` って必要なのかな…… いずれにしろ、1回 docker rm とかでコンテナ消して、再作成されるタイミングで docker-compose.yml の設定が効いてくるようです。設定入れて `docker-compose up -d` とかで再起動しただけではたぶん反映されません。 ## 反映されていることの確認 コンテナの中でファイル作ります。 ``` # docker exec -it mastodon_redis_1 /bin/sh /data # touch hoge ``` で、コンテナの外でファイルができていることを確認します。 ``` # ls -l ./redis/data/ total 753 -rw-r--r-- 1 100 101 770055 May 22 17:35 dump.rdb -rw-r--r-- 1 root root 0 May 22 17:37 hoge ``` またコンテナの中で作ったファイルを削除します。 ``` /data # rm hoge ``` コンテナの外でファイルが消えていることを確認します。 ``` # ls -l ./redis/data/ total 753 -rw-r--r-- 1 100 101 770055 May 22 17:35 dump.rdb ``` これが一番お手軽な気がします。