Docker コンテナ内から Docker ホストの IP アドレスを取得する
IP アドレスとは、インターネット プロトコル アドレスを意味し、構文 192.168.0.1
の数値です。 IP アドレスは、ネットワークに接続されたデバイスを一意に識別し、インターネット上のさまざまなデバイスで実行されているアプリケーションにアクセスするのにも役立ちます.
アプリケーションは、localhost または AWS などのリモート サーバーの 2つの環境で実行できます。 これらのアプリケーションは、ホストの IP アドレスを使用して、それらで実行されているアプリケーションまたはコンテナーにアクセスします。
通常、ローカル ホストでアプリケーションを開発して実行するため、このチュートリアルでは、運用環境で実行されるアプリケーションについては説明しません。 このチュートリアルでは、Docker コンテナー内から Docker ホストの IP アドレスを取得する方法を理解します。
新しいプロジェクトを作成する
WebStorm IDEA を開き、File > New > Project
を選択します。 開いたウィンドウで [空のプロジェクト] を選択し、プロジェクト名を untitled
から docker-host-ip
に変更するか、好きな名前を付けます。
最後に、Create ボタンを押して空のプロジェクトを生成します。
このアプリケーションをテストするには、ランダムに生成されたテキストを含む Web ページを表示する Nginx を使用します。 index.html
ファイルを作成し、次のコードをコピーしてファイルに貼り付けます。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Lorem ipsum text</title>
</head>
<body>
<p>Magna elaboraret dictumst sed quidam potenti tempus
principes morbi. Sit libero et eruditi lectus nonumes simul.
Dicam putent diam volumus similique ponderum sententiae maecenas mattis ridens.
Homero iisque regione voluptatibus nullam detraxit nullam eleifend brute.
Ligula orci dicat ac luptatum quisque appareat invidunt odio mazim.
Reformidans impetus facilis veniam fringilla.
Consectetur eros ferri congue latine constituto veritus persequeris dolorum felis.
Harum felis theophrastus aliquam wisi nibh nec assueverit mi nonumes.
Cubilia option ei ex vulputate at habeo aliquet omittantur delectus.
Sanctus dolorem moderatius venenatis agam suscipit comprehensam imperdiet amet.</p>
</body>
</html>
このテキストを生成するには、Lorem プラグインをインストールし、開発環境で Code > Generate > Generate Text
を押して、10 文を含むテキストを生成します。
イメージを定義する
Dockerfile
という名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。
FROM nginx:1.23.1-alpine
COPY . /usr/share/nginx/html
FROM
- これは、後続の命令を使用してカスタム イメージを作成するベース イメージを定義します。COPY
- これにより、現在のディレクトリ内のすべてのファイルとディレクトリがイメージ ファイル システムの宛先/usr/share/nginx/html
にコピーされます。
Nginx イメージの使用方法の詳細については、Docker ハブ Nginx 公式イメージ で、イメージの作成とそこからのコンテナーの実行に関する詳細な情報が提供されています。
Nginx イメージをビルドする
アプリケーションの Nginx イメージをビルドするには、次のコマンドを使用して、タグ host-ip:latest
でイメージを作成します。
~/WebstormProjects/docker-host-ip$ docker build --tag host-ip:latest .
このコマンドは、Dockerfile
の命令を順番に実行します。 このプロセスは、以下に示すように、ターミナル ウィンドウから表示できます。
=> CACHED [1/2] FROM docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23 0.0s
=> => resolve docker.io/library/nginx:1.23.1-alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c374086 0.2s
=> [2/2] COPY . /usr/share/nginx/html
コンテナを実行する
このセクションでは、実行中のコンテナーからホストの IP アドレスを確認します。 実行中のコンテナーがないため、まず次のコマンドを使用してコンテナーを実行する必要があります。
~/WebstormProjects/docker-host-ip$ docker run --name host-ip-service -d -p 8000:80 host-ip:latest
このコマンドは、ホストのポート 8000 を公開してコンテナーのポスト 80 でリッスンする host-ip-service
という名前のコンテナーを実行します。 アプリケーションの内容を表示するには、ブラウザで localhost:8000
(http://localhost:8000/) にリクエストを発行すると、ランダムなテキストを含む Web ページが表示されます。
Docker コンテナ内から Docker ホストの IP アドレスを取得する
実行中のコンテナでコマンドを実行したいので、次のコマンドを使用して Docker コンテナに bash します。
docker exec -it host-ip-service /bin/sh
出力:
/ #
コンテナー host-ip-service
が実行されている Docker ホストの IP アドレスを取得するには、次のコマンドを入力して、キーボードの Enter ボタンを押します。
/ # /sbin/ip route|awk '/default/ { print $3 }'
出力:
172.17.0.1
コンテナーのデフォルトである Docker ブリッジを使用しているため、ホストが接続されているネットワークの IP アドレスではなく、ブリッジの IP アドレス (172.17.0.1
) を取得することに注意してください。
まとめ
このチュートリアルでは、Nginx アプリケーションを利用してコンテナー内から Docker ホストの IP アドレスを取得する方法を学びました。 コンテナーが実行されている場所に応じて、同じ目的を達成するための他の方法があることに注意してください。要件を満たす任意のアプローチを自由に使用する必要があります。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub