みなさん、こんにちは;
私はTS-464でContainer-Stationを運用しています。
いくつかのコンテナ(ha、grist、lldap、autheliaなど)をセットアップしており、すべてCaddyコンテナをリバースプロキシとして経由してアクセスしています。これらはすべてCSで「コンテナ」として直接インストールしており、composeファイルは使用していません。
すべて問題なく動作していましたが、ホスト名ではうまくいかなかったため、10.0.3.xのアドレスにリバースプロキシする必要がありました。それ自体は問題なかったのですが、NASをファームウェアアップデートのために再起動したところ、すべてのコンテナのIPが変わってしまい、Caddyの設定を新しいIPに再構成しなければなりませんでした…
Dockerには、同じネットワーク内のコンテナのホスト名で参照できる「DNSリゾルバー」のようなものがあるとドキュメントで見た気がしますが、何か見落としているのでしょうか?
もしコンテナのIPが再起動のたびに変わるのであれば、内部DNSサーバーをインストールしても意味がありません。
もう一つの方法は、コンテナに静的IPを設定することですが、その方法が見つかりませんでした(もしかしたらSSHでコマンドラインからできるかもしれません…)
どなたか良い運用方法をご存じでしたら、ぜひ教えてください。
よろしくお願いします。
Xavier
NA9D
2
通常、コンテナはデフォルトでDHCPを使用します。ちょうど調べていたのですが、コンテナに固定IPアドレスを設定する方法があるかどうかわかりません。コンテナのセットアップではその方法はありません。もしかすると、Composeで設定する必要があるかもしれません。
コンテナをブリッジモードにすることで、特定のネットワークアダプターに接続されます。その後、固定IPを割り当てることができます。
marcoi
3
標準コンテナで static(静的IP)を設定する場合、ネットワーク設定でIPを設定できますが、ブリッジ接続になります。
marcoi
4
アプリケーションをComposeで使用する場合、すべてのコンテナが同じネットワーク内にあれば、アプリ名で参照できることは知っています。私はnginx-proxy-manager(NPM)でこれを行っています。以下はnpmともう一つのアプリdozzleのサンプルCompose yamlです。backendAppsネットワークはdockerコマンドで作成したと思いますが、記憶が定かではありません。なお、npmの設定は完全ではなく、2つのネットワークの使用例を示しています。他のアプリはすべてbackendAppsネットワークにあり、NPMがリバースプロキシとHTTPSを提供しています。
services:
npm:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
stdin_open: true
tty: true
container_name: npm
networks:
qnet-static-eth0-custom: # 外部IP/MAC定義用
backendApps: # 共有するすべてのコンテナはこのネットワークを持つべきです。
networks:
qnet-static-eth0-custom:
external: true
backendApps:
external: true
services:
dozzle:
image: amir20/dozzle:latest
container_name: dozzle
stdin_open: true
tty: true
networks:
- backendApps
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 2080:8080
networks:
backendApps:
external: true
npmでの参照方法
Composeファイルに必要なすべての詳細には触れませんが、使い方が分かっていれば参考になるはずです。
ありがとうございます。これらすべてを試してみて、フィードバックをここに書きます。
最後の投稿は、さらに別の問題を解決する道も開いてくれました。リバースプロキシはコンテナのデフォルトネットワーク(lxcbr0)にありますが、「applications」内のコンテナは独自のネットワークにあります。もしアプリにlxcbr0ネットワークを追加すれば、Caddyからアプリへのリバースプロキシができるかもしれません(現時点では、IPアドレスでもpingが通りません)。
また進捗があればご報告します。お時間いただきありがとうございました!
Xavier
約束していたフィードバックをここに投稿します。
ついに手動でリバースプロキシ(Caddy)を「アプリケーション」(つまり compose ファイル)用に作成されたネットワークに接続することに成功しました:
docker network connect my_app_default caddy-1
これで接続の問題が解決し、内部DNSの問題も解決しました。caddyファイル内で、コンテナのIPアドレスではなく「サービス名」にリバースプロキシできるようになりました。
お二人ともご協力ありがとうございました。同じケースをググっている方の参考になれば幸いです。
それでは、
Xavier
「いいね!」 1