Docker コンテナ内から Docker ホストの IP アドレスを取得する

David Mbochi Njonge 2023年6月20日
  1. 新しいプロジェクトを作成する
  2. イメージを定義する
  3. Nginx イメージをビルドする
  4. コンテナを実行する
  5. Docker コンテナ内から Docker ホストの IP アドレスを取得する
  6. まとめ
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
  1. FROM - これは、後続の命令を使用してカスタム イメージを作成するベース イメージを定義します。
  2. 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 Mbochi Njonge avatar David Mbochi Njonge avatar

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

関連記事 - Docker Container