コンテナ内から Rancher Desktop のホストに接続する方法

| 2 min read
Author: shigeki-shoji shigeki-shojiの画像

Rancher Desktop で実行しているコンテナ内からホストにアクセスしたくなる場合があります。

コンテナはそれぞれ固有のIPアドレスを持っています。コンテナをグルーピングして特定のコンテナ間でセキュアな通信もできます。これを応用してサイドカーパターンなどが実現できますが、逆にいうと、コンテナからホストにアクセスしたいと考えて localhost を指定してもそれは単にコンテナ自身をしているということになります。

Docker Desktop では、host.docker.internal を指定することでホストにアクセスできます。

結論から書くと、Rancher Desktop Version 1.3.0 でも host.docker.internal を使用できます。そして、さらにいくつかのホスト名が追加されています。

Windows の場合。

  • host.rancher-desktop.internal

macOS の場合。

  • host.rancher-desktop.internal
  • host.lima.internal

macOS で lima を使用している場合は、host.lima.internal だけが有効で Rancher Desktop は Linux VM に lima を使用していますが、これに加えて host.docker.internalhost.rancher-desktop.internal を加えたようです。

Windows

#

Windows 10 以降では OpenSSH サーバーをオプション機能で有効にできます。

コンテナから、この OpenSSH サーバーにアクセスしてみます。イメージは ssh クライアントが含まれていると便利なので、ここでは maven を使います。

docker run -it --rm maven bash

コンテナからホストにアクセスしてみます。ホスト名は host.rancher-desktop.internal も使えます。

ssh USER@host.docker.internal

macOS

#

macOS では「システム環境設定...」、「共有」、「リモートログイン」を有効にして ssh サーバー機能を有効にできます。

Windows の時と同様に maven のイメージを利用します。

docker run -it --rm maven bash

コンテナからホストにアクセスしてみます。ホスト名は host.rancher-desktop.internalhost.lima.internal も使えます。

ssh USER@host.docker.internal

まとめ

#

コンテナが、それぞれ IP アドレスを持っていることがクラウドネイティブなアプリケーションでコンテナ利用を促進している重要な要因の1つです。しかし、コンテナからホストにアクセスしたい場合もあります。

先日投稿した「Windows、macOS で sshfs を使用する」の中で、macOS で lima や Rancher Desktop を使用する場合、コンテナにマウントできるディレクトリの制約があることを説明しました。

このような環境の場合でも、次のように sshfs をコンテナにインストールすればホストの任意のディレクトリのマウントが可能になります。

docker run -it --rm --privileged ubuntu
apt update
apt install sshfs -y
mkdir /build
sshfs USER@host.docker.internal:/workspace /build

参考

#
豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  3. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  4. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  5. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  6. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  7. コンテンツ重視の静的サイトジェネレーター Astro でドキュメントサイトを構築する (2022-09-07)
  8. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  9. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  10. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)