(2018/4/28 Update 別原因だったため訂正)
Docker Redmineへのプラグイン追加の際、Gemパッケージのインストールが必要となる場合には、docker-compose.yml
でProxy環境変数を設定する。
.gemrc
の配備が必要となる。
発生した問題と調査内容、対応方法を示す。
- 前提環境
- 環境変数でのProxy設定
- 問題動作
- .gemrcファイルをRedmineコンテナに配備する
- no_proxyの設定が誤っていた
- 問題解消
- まとめ - Proxy環境のDocker RedmineでGemインストールするための設定
前提環境
Redmine Docker Image: sameersbn/docker-redmine
こちらのdocker-compose.yml
で各パラメータを設定している。
docker-redmine/docker-compose.yml at master · sameersbn/docker-redmine · GitHub
環境変数でのProxy設定
コンテナへの環境変数設定はdocker-compose.yml
で定義している。docker-compose.yml
ファイルに認証情報を含むプロキシ情報は記載したくないので、ホストOSの環境変数を引き継ぐようにしている。
version: '2' services: redmine: image: sameersbn/redmine:3.4.4-2 container_name: redmine depends_on: - postgresql restart: always environment: - TZ=Asia/Tokyo - HTTP_PROXY=${HTTP_PROXY} - http_proxy=${HTTP_PROXY} - HTTPS_PROXY=${HTTPS_PROXY} - https_proxy=${HTTPS_PROXY} - NO_PROXY=${NO_PROXY} - no_proxy=${NO_PROXY} <snip>
問題動作
このログの通り、Gemでのインストールに失敗している。UnknownHostError
のログより、Proxyに通信していないことが原因となっている。ホストOSでのtcpdumpからも、rubygems.org
の名前解決(DNS)要求が発生していた。(本来はDNSなしでProxy通信)
$docker-compose up Starting postgres-redmine ... Starting postgres-redmine ... doneRecreating redmine ... Recreating redmine ... doneAttaching to postgres-redmine, redmine postgres-redmine | Initializing datadir... redmine | Initializing logdir... redmine | Initializing datadir... redmine | Symlinking dotfiles... redmine | Installing configuration templates... redmine | Configuring redmine... postgres-redmine | Initializing certdir... postgres-redmine | Initializing logdir... postgres-redmine | Initializing rundir... postgres-redmine | Setting resolv.conf ACLs... postgres-redmine | Creating database user: redmine postgres-redmine | Creating database: redmine_production... postgres-redmine | ? Granting access to redmine user... postgres-redmine | Starting PostgreSQL 9.6... postgres-redmine | LOG: database system was shut down at 2018-04-19 12:22:57 UTC postgres-redmine | LOG: MultiXact member wraparound protections are now enabled postgres-redmine | LOG: database system is ready to accept connections postgres-redmine | LOG: autovacuum launcher started redmine | Configuring redmine::database... redmine | Configuring redmine::unicorn... redmine | Configuring redmine::secret_token... redmine | Generating a session token... redmine | Note: redmine | All old sessions will become invalid. redmine | Please specify the REDMINE_SECRET_TOKEN parameter for persistence. redmine | **SHOULD** be defined if you have a load-balancing Redmine cluster. redmine | Configuring redmine::max_concurrent_ajax_uploads... redmine | Configuring redmine::sudo_mode... redmine | Configuring redmine::autologin_cookie... redmine | Configuring redmine::email_delivery... redmine | Configuring redmine::backups... redmine | Configuring redmine::backups::schedule... redmine | Configuring nginx... redmine | Configuring nginx::redmine... redmine | Installing plugins... redmine | Installing gems required by plugins... redmine | Gem::RemoteFetcher::UnknownHostError: no such name redmine | (https://rubygems.org/gems/rubyzip-1.2.1.gem) redmine | An error occurred while installing rubyzip (1.2.1), and Bundler cannot continue. redmine | Make sure that `gem install rubyzip -v '1.2.1'` succeeds before bundling. redmine | redmine | In Gemfile: redmine | write_xlsx was resolved to 0.85.3, which depends on redmine | zip-zip was resolved to 0.3, which depends on redmine | rubyzip redmine exited with code 5
gemは基本的に環境変数でhttp_proxy
, https_proxy
を設定していれば問題ないはずだが、私の環境では期待動作とならなかった。
.gemrcファイルをRedmineコンテナに配備する
BundleとGemインストールでProxyの設定方法が異なるという情報を見た気がするので、設定方法を変更する。上記(とtcpdumpでの切り分け)より、パッケージ情報は取得できているためBundlerは問題なく、Gem installの際に期待するProxy動作となっていないと特定できる。
そのため、GemのProxy設定の一つである.gemrc
をコンテナに配備した。
no_proxyの設定が誤っていた
原因はこちらにまとめた通り、no_proxyの設定誤りだった。
(NG) no_proxy=,localhost,127.0.0.1 (OK) no_proxy=localhost,127.0.0.1
問題解消
上記no_proxyの修正により、プラグインで必要となるGemパッケージのインストールでも正常にProxy通信が可能となった。
まとめ - Proxy環境のDocker RedmineでGemインストールするための設定
Proxy環境において、no_proxyを設定する場合に、記載が誤っているとGemパッケージのダウンロードに失敗する。
no_proxyを適切に設定することで、Redmineプラグインで追加で必要となるGemパッケージについてもProxy経由でRubygemsからダウンロードすることができるようになった。