プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

QNAP の Container Station で docker-compse で作成したアプリケーションから DNS が解決できない

こちらの記事で Container Station で docker-compose を使ってアプリケーションを立ち上げる話をメモりました。

で、いろいろと試していたところ、急にある時から、同じ docker-compose.yml を使っているのに、コンテナ内から DNS が解決できなくなりました。

まあ、いろいろと試したところ、微妙とはいえ解決できたんですが、原因も確実な解決方法もわからなかったので、結構、もやもやしています。

何かの参考になるかもしれませんので、一応、その時、試したことなどをいろいろとメモっておきます。

(2023/7/28 追記)関連するアプリ等のバージョンは下記のとおりです。

  • TS-251+
  • QTS 5.0.1.2425
  • Container Station 2.6.7.44
  • ネットワークと仮想スイッチ 2.4.0 (2023-06-06)
  • QuFirewall 2.3.3 (2023/03/27)

きっかけ

きっかけは、 Roudcube という web-based なメールクライアントを試そうと思って docker を使ったときのことです。

最新版のイメージで立ち上げて、いろいろと試したあと、一度設定を変更して接続テストを行いました(docker-compose.yml 内のメールサーバーの接続設定が暗号化なしだったので、ssl://を先頭につけた)。結果的にうまく接続できなかったので、もう一度最初の設定に戻して立ち上げなおそうと思ったら、同じ docker-compose.yml を使っているのに、ログインできない、という状況になりました。

コンソールを見てみると、

php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

というようなエラーが出ています。ググると、どうも、名前解決に失敗した際に出るエラーのようです。

php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolutionの対応 - [PHP + PHP] ぺんたん info

どういうことだ?

調査

QNAP の Container Station 上の docker コンテナのネットワークは、

コンテナ内の NIC --(dockerのネットワーク)-- QNAP の仮想スイッチ --(NAT)-- NASの物理 NIC--(仕事場LAN)--インターネット

という接続になっているんじゃないかと考えています(違ってたらごめんなさい)。

特に仮想スイッチ周りが怪しそうなので、既存の正しく動作しているコンテナアプリケーションの設定内容と比較してみたのですが、このあたりの設定に問題は無いよう見えます。

あれこれググりながら調べていたら、たまたま、下記の記事を見つけたところ、

Container Station でよくあるコンテナ関連の問題をデバッグし、解決する方法 | QNAP

コントロールパネル -> システム -> セキュリティ -> 許可/拒否リスト を見て、外部への接続が許可されているか確認する、というのがありました。

手元の環境で、ここを見てみると、 QuFirewall の設定をみろ、となっています(コントロールパネルから見れなくなるのは、インストール時にこの内容が QuFirewall に移されるためです)。

で、 QuFirewall 側の設定内容を確認すると、拒否リストには特に追加されてません。

一方、許可リストを探したのですが、最初はすぐにわかりませんでした。たまたま、『アプリケーション』というのをクリックすると、

のように表示されて、ここで、 Contaienr Station で作られたアプリケーションが対応する仮想スイッチを追加していることがわかりました。

で、この内容をよく見てみると、今問題の起こっている仮想ネットワークの名前が入っていません。どうも、これが問題っぽいですね。

現象の確認

ということで、現象を確認するため、一度、 QuFirewall を無効にしてから、 Container Station でアプリケーションを再度立ち上げてみます。

すると、今回は問題なく動作しました!

やはり、これのようです。

解決?

じゃあ、 QuFirewall のアプリケーションの対象リストに追加できれば、問題解決になるかと思いきや、ここを編集する機能が見つかりません。

困ったなと思って、再度 QuFirewall を有効にしてみて、もう一度問題が起きることを確認しようとすると、あれ?今度も正しく動作します。

QuFirewall 側の設定を見ると、新たに作られた仮想スイッチが、ちゃんとアプリケーションのリストに追加されています。うーん、期せずして解決したようです。

とはいえ、もう何度か繰り返していると、やはりうまく仮想スイッチが追加されないケースがあります。どういうことだ、これ?

その後も何度か試してみても、結局のところ、うまく仮想スイッチが追加されない条件はわかりませんでした。

まとめ

ということで、はなはだ微妙な結論なんですが、上記の経験からすると、QNAP の Contaienr Station でネットワーク関連に問題があった場合は、

  • QuFirewall を確認してみる
  • 仮想スイッチが追加されていないなら、一度 QuFirewall を無効化してみて、再度有効化するのを試す

といったところでしょうか?

それでも、仮想スイッチが QuFirewall にうまく追加されないときは、

  • QuFirewall を一時的に無効にする
  • 対象となる仮想スイッチからのパケットを許可するルールを明示的に追加する

などとしてやれば、対応できそうです。

後者のやり方は、仕様中のプロファイルにある『編集』ボタンを押すと、下記のような画面がでてくるので、

ここの、『ルールの追加』を押して、

のダイアログ画面で、インターフェースとして、追加したい仮想スイッチを選択したうえで、あとは適当な許可ルールを設定してやればOKです。

対処療法なんで気持ち悪いですが、何かのご参考まで。

参考

  • 2023/7/28 アプリのバージョン情報を追記