Docker snap版でハマった話とapt版へ移行した手順【データ消失寸前】

Docker

■ はじめに

お久しぶりです!実は先週から今日に至るまで、ホームページが全てダウンしてました…。
私は以下のサイトをDockerで運用していたのですが…
gotohsys.com(メインのホームページ)
ubuntu.gotohsys.com(このブログ)
baragasuki.gotohsys.com(開運系ブログ)
bible.gotohsys.com(聖書ブログ)
新たにサイトを立ち上げようとGemini Code Assistに頼って、というか、解説も読まずに脳死状態でコードをコピペして実行してたら大惨事になってました。

今回は、Docker環境でWordPressを運用していた際に起きたトラブルと、その復旧までの流れをまとめます。

結論から言うと、snap版Dockerを使っていたことでハマりかけました。いや、ハマりました。
最悪、データを消す寸前までいったので、同じ状況の方の参考になればと思います。


■ 起きた問題

ある日、Dockerコンテナを操作しようとしたところ、以下のエラーが発生しました。

cannot stop container: permission denied

コンテナの停止すらできない状態です。

さらに、Docker Composeで再起動しようとしてもエラーが出て、環境が正常に動かなくなりました。


■ 原因

新しくサイトを立ち上げるというか、既存のサイトを整理しようとしてて…

  • ポート変更
  • コンテナ再起動
  • DB設定変更

👉 この時点で

  • 「接続先」
  • 「パスワード」
  • 「DBの実体」

がズレ始めたというか、何をやったかもうわからなくなってました。

調べていくと、Dockerがsnap版でインストールされていました。(AIにオススメされるがままに入れたから覚えてない!)

snap版Dockerは通常のapt版と違い、データの保存場所が特殊です。

/var/snap/docker/common/var-lib-docker/

この中に、コンテナやvolume(データ)がすべて入っています。
ChatGPT、Geminiに聞いたら、コンテナがゾンビ化してるから、削除した方がいいって言われました。

…ですが、その言葉に素直に従い、

snap版Dockerを削除すると、この中のデータも消える可能性がある

という状態でした。


■ 危なかったポイント

ChatGPTに進められるがまま、apt版Dockerに入れ直すように言われたので、最初はそのままsnap版Dockerを削除しようとしていました。

しかし、ふと

「今のデータどこにあるんだ?」

と違和感を感じて調べたところ、volumeの存在に気づきました。

もし気づかず削除していたら、WordPressのデータは完全に消えていた可能性があります。


■ 実際にやったこと(データ救出)

まず、Dockerのvolumeを直接確認しました。

/var/lib/docker/volumes/

その中に、WordPressのデータがありました。

テーマ(luxeritas)も確認できたので、間違いなく対象のサイトです。


■ WordPressデータコピー

sudo cp -a /var/lib/docker/volumes/gotohsys-site_wp_data/_data/. \
~/wordpress-sites/baragasuki/wp_data/

■ DBデータコピー

sudo cp -a /var/lib/docker/volumes/gotohsys-site_db_data/_data/. \
~/wordpress-sites/baragasuki/db_data/

これで、Dockerに依存しない形でデータを確保できました。


■ 復元手順

その後、apt版Dockerをインストールし、docker-composeで環境を再構築しました。

sudo apt install docker.io docker-compose

■ docker-compose.yml(例)

services:
  db:
    image: mariadb:10.11
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "8087:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: root
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - ./wp_data:/var/www/html

■ 結果

コンテナを起動すると、無事にWordPressが復活しました。

docker compose up -d

ブラウザからアクセスすると、以前のサイトがそのまま表示されました。


■ 学んだこと

今回の件で強く感じたことは以下です。

  • snap版Dockerは避けた方がいい
  • volumeの場所は必ず把握する
  • データさえあれば復旧できる

■ まとめ

今回は偶然データに気づけましたが、知らずにsnap版Dockerを削除していたら復旧は困難だったと思います。

Dockerを使う場合は、

「データがどこにあるか」を必ず意識することが重要です。


■ おわりに

同じようにDocker環境でハマっている方の参考になれば幸いです。

もし同じ状況で困っている方がいれば、まずはvolumeの場所を確認してみてください。

コメント

タイトルとURLをコピーしました