私はOpenVPNサーバーを(Debian 8.2に)ドッキングしようとしましたが(例えば、すでにそのようなコンテナがあることを知っています)、コンテナ内に問題が発生してサーバーが起動しません。
ログを確認することにしましたが、/var/log/syslog
(私のホストの)OpenVPNログはコンテナ内にありません。
私はそれがrsyslog
インストールされていないと仮定し、OpenVPNのインストール前にDockerfileにインストールを追加しました。しかし、これは効果がなく、syslog
まだ欠けています。
私のDockerfileは次のようになります。
FROM debian:8.2
USER root
EXPOSE 53/udp
EXPOSE 1194/udp
EXPOSE 443/tcp
RUN apt-get update
RUN apt-get install -y rsyslog
RUN apt-get install -y openvpn
# ...
# Some configuration stuff
# ...
ENTRYPOINT service openvpn start && sh
問題は次のとおりです。
私のホストDebian 8.2にデフォルトのインストール後にOpenVPNにログインします
syslog
が、コンテナ内にログインしないのはなぜですか? OpenVPNロギングを強制するようにホストに何も設定していませんsyslog
。これはデフォルトの動作です。Dockerコンテナ内で実行されているOpenVPNサーバーのログ記録を構成する方法は?
答え1
OpenVPNは起動するものがないため、このDockerfileでは起動しません。エントリポイントはですsh
。これが実行されるすべてです。
Dockerで2つのデーモンを起動するには、エントリポイントはデーモンを起動するプログラムでなければなりません。多くの人supervisord
がこれを使用しています。 Dockerは比較的独特のソフトウェアであり、コンテナで複数のデーモンを実行することは寛容であるとは見なされません。
これが単にデバッグのためのものであれば、問題はありません。 oropenvpn
で実行しないでください。標準出力に書きます(おそらく標準エラーを見て驚くことはありません)。手動で起動した場合、デバッグに役立ちます。端末からすべてのログメッセージをすぐに表示できます。--daemon
--log
エントリポイントを設定し、インタラクティブモードでコンテナを手動で起動する場合も同様です。バックグラウンドコンテナで起動すると(あいまいさをご了承ください)、出力がキャプチャされますdocker logs
。これは、systemd(およびsystemd "log"ロギングシステム)などの最新のinitシステムで好むのと同じテクノロジです。
必要な方法でデーモンを設定した後、他の回答など、ログをキャプチャするためのよりカスタマイズされたシステムに興味があるかもしれません。
によると、docker logs
ホストシステムログに書き込む「syslog」ドライバがあります。docker logs
うまくいかないのですが、私の考えはそれがあなたにとって問題にならないと思います。
警告する:docker logs
ロギングドライバを使用すると動作します。しかし、Debianはデフォルトでこれが再起動時にログを失うことを前提としています。 Debian は永続ログを設定しないからです。しかし、必要に応じて変更することは難しくありません。
このコマンドをサポートする別のロギングドライバdocker logs
は "json-file"です。これが続くことを願っていますが、他の解決策の1つを好むかもしれません。
「なぜ」という質問
要点は、Dockerコンテナが必ずしもベースとなるオペレーティングシステムと同じように動作する必要はないということです。 Dockerは、、、または仮想マシンなどのLXC
オペレーティングシステムの仮想化ではありません。systemd-nspawn
Dockerから派生したが、LXC
単一のプログラムを実行する「アプリケーションコンテナ」用に特別に設計されています。
(現在)サーバディストリビューションは、複数の実行プログラムの組み合わせとして設計されています。したがって、パッケージをインポートしてこれらのアプリケーションコンテナの1つ内でまったく同じように機能すると期待することはできません。
ロギングデーモンとの通信が良い例です。人々がアプリケーションコンテナの概念に慣れていること以外は何も変わりません。そして、これが彼らが本当に使用したいかどうか:)。私は、多くのシステム管理者がNixOSを使用してAFAIK間でパッケージを共有するなど、LXC(オペレーティングシステムコンテナ)のマッシュアップに興味があると思います。それともより良いLXC。