結論
- FluentdのDocker公式イメージを使用してプラグインを入れるときはUSER rootしてからgemを実行する
失敗例
そのままgem installしようとすると失敗します。
FROM fluent/fluentd:v1.11-1 RUN fluent-gem install fluent-plugin-elasticsearch && \ fluent-gem install fluent-plugin-slack && \ fluent-gem install fluent-plugin-grep
これをdocker buildすると・・・
ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /usr/lib/ruby/gems/2.5.0 directory. : : [error]: fluent/log.rb:362:error: config error file="/fluentd/etc/fluent.conf" error_class=Fluent::ConfigError error="Unknown output plugin 'elasticsearch'. Run 'gem search -rd fluent-plugin' to find plugins"
と怒られてしまい、buildに失敗します。
原因
Dockerfileでの実行ユーザーが fluent になっているため起こります。 詳しくは以下を参照してください。
fluentユーザーでは、 /usr/lib/ruby/gems/2.5.0 への書き込み権限がありません。
成功例
一度USER rootでrootユーザになってからgemを実行します 一通りのgem installが終わったらfluentユーザに戻します。
FROM fluent/fluentd:v1.11-1 + USER root RUN fluent-gem install fluent-plugin-elasticsearch && \ fluent-gem install fluent-plugin-slack && \ fluent-gem install fluent-plugin-grep + USER fluent
これで問題なくdocker buildできました。
まとめ
- FluentdのDocker公式イメージを使用してプラグインを入れるときはUSER rootしてからgemを実行する
- https://hub.docker.com/r/fluent/fluentd/を事前に読む