コンテナ内から Rancher Desktop のホストに接続する方法
庄司です。
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.internal
と host.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.internal
、host.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