Fedora 32でdockerが動かない場合の対処例

Fedoraのdocker-composeで、自分用のWordPressを動かしております。

先日、Fedoraを32に更新したところ。

WordPressが動作しなくなってしまいました。あれれー?

動かなくなった原因は記事に記載致しますが、大まかに申し上げると、dockerが正常に動作していないようです。

いずれdockerからPodmanに移行しなければならないのですが・・・移行時にdockerが動かないのは不便ですので、一時的にでもdockerを動かす方法を記録しておこうと思います。

※20.9.21追記:

その後、dokcer composeからPodmanへ移行しました。Podman用のyamlファイルを用意しましたので、今は移行したほうが楽な気がします。


Fedora32で一時的にDockerを動かす手順

Fedora 32対応版Dockerのインストール

こちらのfedora MAGAZINEの記事を参考にしたところ。どうやら、6月26日時点でFedora 32ではDockerがサポートされていないようです。

サポートされない理由は、podmanへ開発の主軸が移ったためのようです。ふむふむ。

しかしながら。サポート外ながら、Docker環境のインストール手順が紹介されています。

こちらの手順で、dockerを入れ替えてみました。

  1. dockerをアンインストールします。
    sudo dnf remove docker-*
    sudo dnf config-manager --disable docker-*

  2. CGroupsを有効にします。
    sudo grubby --update-kernel=ALL --args="systemd.unified_cgroup_hierarchy=0"

  3. firewalldの設定を変更し、docker-0インタフェースをホワイトリストに追加します。
    sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
    sudo firewall-cmd --permanent --zone=FedoraWorkstation --add-masquerade

  4. Mobyをインストール、dockerを有効化、再起動します。
    sudo dnf install moby-engine docker-compose
    sudo systemctl enable docker
    sudo systemctl reboot


WordPress用docker-compose.yamlの更新

dockerを入れ替えてみたもものの、wordpressが正常に動作していません。orz

最初に、オフィシャルイメージ情報をもとに、docker-compose.yamlを更新しました。

コンテナ間で通信できるよう、linksを追加しました。

またデバッグ用の設定を追加しました。ユーザ名やパスワードは適宜変更して下さい。

version: '3.3'
services:
  db:
    image: mysql:latest
    volumes:
      - "./.data/db:/var/lib/mysql:z"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    security_opt:
       - seccomp:unconfined

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    links:
     - "db"
    ports:
      - "8000:80"
    volumes:
      - "./.data/html:/var/www/html:z"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DEBUG: 0

正常に動作しない原因を探るため、デバッグモードを動かせるようにしました。WordPressをデバッグ実行する場合、「WORDPRESS_DEBUG: 0」を「:1」に設定します。

docker-compose.yaml更新後、WordPressを起動してみました。

docker-compose up -d

しかしWordPress画面でエラーが表示されています。

エラーの原因は、mysqlの動作か、コンテナ間の通信にある感じです。


mysqlの動作確認

mysqlが正しく動作しているかどうか、確認してみました。

su
cd /root/docker/wordpress
docker-compose exec db bash
# dbコンテナでmysqlコマンドを実行
mysql -h localhost -p -u wordpress

このようにmysql> プロンプトが表示されれば、mysqlは問題なく動作しています。

というわけで、怪しいのはコンテナ間の通信、ということになります。


Firewalldのログ確認

firewalldのログを表示します。

firewall-cmd --set-log-denied=all
firewall-cmd --reload
journalctl -fn0

ログを見てみると、ポート番号3306の通信がfirewalldでブロックされていて、dockerのコンテナ間で通信ができていないようです。ふむふむ。

少し厄介なのは、docker0のインタフェースではなく、br-で始まるdocker-composeの動的なネットワーク・インタフェースでブロックされているところです。


Firewalldのtrustedゾーンにdocker-composeのインタフェースを追加

次の手順でfirewalldの信頼できるゾーンにdocker-composeのインタフェースを追加しました。

ip addr
# br-で始まるdocker-composeのインタフェースを確認
firewall-cmd --permanent --zone=trusted --add-interface=<brで始まるインタフェース名>
firewall-cmd --reload
# コピペ用
# firewall-cmd --list-all
# firewall-cmd --get-active-zones
# firewall-cmd --list-services
# firewall-cmd --permanent --zone=trusted --remove-interface=<brで始まるインタフェース名>

ip addrコマンドで、docker-composeで生成されたインタフェースを確認します。この場合、br-bcb~というインタフェースが、docker-composeで使用されています。

このインタフェースを、trustedゾーンに追加することで、wordpressコンテナとdbコンテナ間の通信が行えるようにしました。

今度は正常にwordpressが動作しました。ふぅ。


とりあえずwordpressが動作しましたが。

docker-composeコマンドでサービスを再起動すると、インタフェースが変わるため、また動かなくなります。再度、firewalldのtrustedゾーンにインタフェースを追加する必要があります。

根本的な解決方法は。

やはりdockerからPodmanへの移行でしょうか。

とりあえずdockerを動かして、データを取り出せる状態にしましたので。追々Podman環境を作成していこうと思います。

※20.9.21追記:

スポンサーリンク

フォローする

スポンサーリンク