はじめに
個人開発でDockerコンテナ内にて動いているWebアプリのSSL証明書(Let's Encrypt)をcronによって自動で更新しようとした際に上手く動作させることができませんでした。
結論から言えばただのパスの通し忘れだったのですが、Dockerコンテナの性質であったり、docker composeコマンドを使用しているからだったりと多くの勘違いの末に膨大な時間をかけてようやく解決できたので、備忘録として残しておきたいと思いました。
発生した問題
cronジョブ内でdocker-compose
コマンドを使用しようとした際に、コマンドが見つからないというエラーが発生し、SSL証明書の自動更新が実行できませんでした。
/bin/sh: 1: docker-compose: not found
原因
冷静に考えたら見れば一発なのですが、この問題の原因は、cronが実行される環境のデフォルトのPATHにdocker-compose
が含まれていなかったためでした。
というわけで、crontabに以下を追記したところ、無事SSL証明書の自動更新に成功しました。
PATH=/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
ちなみにですが、docker-composeはDocker Compose V1のコマンドで既に非推奨です。Docker Compose V2を素直に使いましょう(戒め)。
反省
- エラーログをしっかりと確認しよう!
- プロセス実行環境のPATHを常に意識しよう!