質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

firewalld

firewalldは、CentOS7からデフォルトになったパケットフィルタリングです。一時的なルールと永続的なルールが設定でき、通信の許可・拒否をコントロール。バージョン6まで利用されてきた「iptables」における課題をカバーしています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

0回答

1594閲覧

systemd でdockerとfirewalldの起動順序を変更したい

myuchan15

総合スコア8

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

firewalld

firewalldは、CentOS7からデフォルトになったパケットフィルタリングです。一時的なルールと永続的なルールが設定でき、通信の許可・拒否をコントロール。バージョン6まで利用されてきた「iptables」における課題をカバーしています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/04/15 13:21

OS起動時に、デフォルトですとfirewalldが先に起動し、そのあとにdockerが起動するのですが、
それだとfirewalldがエラーを出し、正常に起動しないのですが、(firewalldが機能しないので、ザル状態になる)
dockerは正常に起動しコンテナも問題なく自動で立ち上がります。
そこで あれこれ検証した結果、firewalld も docker も stop した状態で
docker → firewalld の順番で起動すると どちらも問題なく起動します。
そこで、/etc/systemd/system/multi-user.target.wants/docker.servie の中身を見ると
[Unit]のところに After=firewalld.service がデフォルトで入っているので、
これは、「docker は firewalld の後に起動する」 という意味です。(という認識です)
デフォルトがそのような設定なので、そもそもこの設定をいじるのは良くないのかとも思いましたが、
「firewalld の前に docker が起動する」 となるように上記パスにある docker.servie と firewalld.service
をAfterとBeforeを駆使して編集してからOS再起動を試しましたが、OSが起動しなくなったりしてしまいました。
やはりBeforeとAfterを使ってfirewalld と docker の起動順序を変更するというのは無理な事なのでしょうか?
当方がsystemdをあまり深く理解していないこともあるかもしれませんが、
OS起動時にdocker → firewalld の順番で問題なく起動させるにはどのようにしたら良いでしょうか

コンテナはそれぞれ3台起動するようになっているのですが、
コンテナのネットワークは3台とも同じネットワークで(コンテナ内ネットワーク)ymlファイルにて driver:bridge を指定しています。

OS : CentOS7.6
docker version: 19.03.15
firewall-cmd version: 0.5.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2021/04/15 22:12 編集

起動しなくなるのは、依存関係がループしたりしているのだと思います。 現在のファイルは、どのような内容になっているのでしょうか? どのような記述を試されたのでしょうか?
myuchan15

2021/04/16 01:06

CHERRY様、 ありがとうございます。 仰せの通り、依存関係のループはあたりをつけておりました。 ファイル内容は以下の通りとなります。 ■現在 - デフォルト状態  ※Unit部分しか編集しなかったので、Unit部分のみを抜粋しています。 ------------------------------------- # cat /etc/systemd/system/multi-user.target.wants/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service After=network-online.target firewalld.service containerd.service Wants=network-online.target Requires=docker.socket ------------------------------------- # cat /etc/systemd/system/multi-user.target.wants/firewalld.service [Unit] Description=firewalld - dynamic firewall daemon Before=network-pre.target Wants=network-pre.target After=dbus.service After=polkit.service Conflicts=iptables.service ip6tables.service ebtables.service ipset.service Documentation=man:firewalld(1) ------------------------------------- ■設定してから再起動後、dockerのみ起動しなかったパターン ------------------------------------- # cat /etc/systemd/system/multi-user.target.wants/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service Before=firewalld.service #追記 After=network-online.target containerd.service    #firewalld.service を削除 Wants=network-online.target Requires=docker.socket ------------------------------------- ※dockerが起動しなかった際のエラーが下記となります。 systemd[1]: Job docker.service/start deleted to break ordering cycle starting with firewalld.service/start ■設定してから再起動後、OSが起動しなくなったパターン ------------------------------------- # cat /etc/systemd/system/multi-user.target.wants/docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com BindsTo=containerd.service After=network-online.target containerd.service    #firewalld.service を削除 Wants=network-online.target Requires=docker.socket ------------------------------------- # cat /etc/systemd/system/multi-user.target.wants/firewalld.service [Unit] Description=firewalld - dynamic firewall daemon Before=network-pre.target Wants=network-pre.target After=dbus.service After=polkit.service After=docker.service #追記 Conflicts=iptables.service ip6tables.service ebtables.service ipset.service Documentation=man:firewalld(1) ------------------------------------- よろしくお願いいたします。
TaichiYanagiya

2021/04/16 14:04

firewalld の rich rule で docker 関連のルールを入れているのでしたっけ? であれば、起動順序を変えるのではなく、docker 側でそのルールを扱うようにした方がいいのではないでしょうか。 docker サービス起動ファイルの ExecStartPost= を使ってルールを追加するとか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問