Docker で構築した開発環境で gh-pages を実行するとエラーになる原因と対策 ~git@github.com Permission denied (publickey).~
ちょっとした静的な Web アプリなら 無料で利用できるので GitHub Pages をデプロイ先によく利用しています。
デプロイの方法としては React 等の場合は Node.js で環境構築するため、gh-pages で 簡単に GitHub Pages へ公開することができます。
普段から GitHub に接続できている環境であれば gh-pages コマンドを実行しても特にエラーとなることはないはずなのですが、
Web の開発環境を Docker で構築している場合、gh-pages を実行すると以下のエラーになることがあります。
git@github.com Permission denied (publickey).
メッセージとしてはアクセス権がない系のエラーですが、今回はこのエラーの原因と対策として Docker コンテナ内で gh-pages を利用する際の注意点をご紹介します。
原因:Docker コンテナ内に SSH の Private Key がない
gh-pages コマンドのデフォルトの設定では初回実行時に「gh-pages」ブランチが作成されることからもわかるように、
gh-pages コマンドは GitHub へ接続できることが前提となっています。
そのため、自分のリポジトリに対して git コマンドが実行できる状態でないと gh-pages は利用できません。
GitHub への認証方法として SSH Key を登録している場合は、gh-pages コマンド実行時にユーザ名とパスワードを聞かれることがありません。
そのため、Docker コンテナ内に SSH の Private Key を登録していない場合に「git@github.com Permission denied (publickey).」のエラーメッセージが表示されてしまいます。
普段から Docker コンテナではなくローカル環境で GitHub への接続して利用している場合に、このエラーがでると「なぜ?」と焦ることがありますが、開発環境を Docker コンテナで構築している場合、ローカルとは別の環境であるため、当然なにもしない場合は GitHub へ接続することができません。
対策:Docker コンテナ内に SSH キーを配置する
ローカル環境で GitHub へ接続できている場合は、ローカルに SSH キーが存在するはずです。
例えば、ホームディレクトリの「.ssh」ディレクトリに「id_rsa」ファイルなどです。
ローカル環境の ssh キーが見つかれば、そのファイルを Docker コンテナ内の.ssh ディレクトリにコピーしましょう。
- ローカル環境のSSHキー(id_rsaなど)をコンテナ側からアクセスできるところに配置する
- コンテナにbashでアクセスしSSHキーを.sshディレクトリに配置する
また、Git の初期設定 も忘れずに行いましょう。
具体的には以下の通り、Email とユーザ名を設定しましょう。
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
gh-pages コマンドを確認する
SSH キーと Git の設定が完了した後は、gh-pages コマンドを実行してみましょう。
成功すれば、gh-pages ブランチがデプロイ対象のリポジトリに作成され、以下の URL で公開されているはずです。
https://[自分の GitHub アカウント].github.io/[リポジトリ]/