Docker で構築した開発環境で gh-pages を実行するとエラーになる原因と対策 ~git@github.com Permission denied (publickey).~

Docker,git

ちょっとした静的な 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/[リポジトリ]/

Docker,git

Posted by snow