VSCodeのExtensionであるRemote ExplorerでDockerコンテナ(以後、コンテナ)にアクセスしました。
Dockerとは、コンテナ仮想化を用いてOSレベルの仮想化を実現できるソフトウェアです。
試したいことがあり、環境を簡単に構築できるようにしたかったため、Linux環境にコンテナを構築していました。
Tera TermでLinux環境に接続してコンテナに入って開発などしていたのですが、viでプログラミングするのはやりづらいですし、そもそもアクセスするのに何度かコマンドをたたく必要があり手間です。
そこで、VSCodeのRemote Explorerを用いてコンテナに直接アクセスすることにしました。
VSCodeへのRemote Explorerのインストール
前の記事でインストール方法を記載しておりますので必要であれば参考にしてください。
簡単に言うと、ExtensionでRemote Explorer検索してインストールボタンを押すだけです。
コンテナにアクセスするための設定をする
Remote Explorerを使ってコンテナがあるサーバーにVSCodeでアクセスします
リモートサーバーへのアクセス方法は先ほどあげた記事で確認してください。
アクセスできたらRemote Explorerを開きます。
画面左上にプルダウンがあるため、RemoteからDev Containersに切り替えます。
サーバーにあるコンテナが表示されるため、接続したいコンテナの右側のボタンをクリックします。
Attachしていいかというメッセージが表示されるためOKボタンをクリックします。
これでコンテナに接続できたはずです。
あとはOpen Folderとかをクリックして好きなフォルダを開けます。
Docker exec -t…とかしないでVSCodeでアクセスできるようにできましたので便利です。
root権限のSSHログインを禁止していてコンテナにアクセスできない
サーバーは基本root権限でのSSHログインは禁止していると思います。
cat /etc/ssh/sshd_config
私の環境もこのように記載してログインを不可としておりました。
PermitRootLogin no
10分調べた限りですがrootのログイン禁止した状態では、VSCode経由でDockerのフォルダを開くことはできませんでした。
もちろんVSCodeのTerminalからであればできますが、エディタ形式で開くことはできませんでした。
結局rootのsshログインを禁止した状態で開くのは諦めて、接続元のIPだけrootログインを許可する設定に変更しました。
sshd_configファイルの末尾に下記を追記しています。
Match Address ×××.×××.×××.×××
PermitRootLogin yes
グローバルIPアドレスからの接続かつ固定IPでない場合はやめましょう。
固定のグローバルIPをプロバイダーから取得していない場合、グローバルIPは基本的に一定期間で変動します。
知らない人に指定したグローバルIPが割り振られてしまい、ログインを試行できてしまいます。
悪い人に割り当てられない限りそんなことはしないと思いますが、念の為穴を作らない設定にしましょう。
設定に戻りますが、上記設定をすれば当然VSCodeからrootでsshログインできます。
rootでコンテナのあるサーバーにリモートアクセスし、Remote Explorerのペイン上部でDev Containerを選択すると自身の管理するコンテナが見えます。
dockerの権限をroot以外にも与えればいいとか他にやり方があるかもしれませんが、現時点では穴を空けるという最速の手段を取ってしまいました。

