1. ホーム
  2. docker

ドッカーホストのホスト名を、そのホスト上のドッカーコンテナ内から env vars なしで取得する方法

2023-08-13 20:02:09

質問

dockerホストのホスト名を、そのホスト上で動作するコンテナの内部から取得する方法には、環境変数を使用する以外にどのようなものがありますか? コンテナ作成時に環境変数としてホスト名をコンテナに渡せることは知っています。 実行時にどのように調べればいいのか悩んでいます。

foo.example.com (docker host)
  bar (docker container)

コンテナ bar で動作しているコンテナを、Docker ホスト foo.example.com を実行して、"foo.example.com"を取得しますか?

ユースケースを追加するために編集します。

コンテナはフォームのサービス検出のためにSRVレコードを作成します。

_service._proto.name. TTL class SRV priority weight port target.
-----------------------------------------------------------------
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo.example.com.

ここで、20003 は bar の固定ポートでリッスンしているサービス用に docker ホスト上で動的に割り当てられたポートです (docker はホストポートからコンテナポートへのマッピングを処理します)。

私のコンテナは、SRV レコードが正常に作成されたことを確認するためにヘルスチェックを実行します。

_service._proto.name. TTL class SRV priority weight port target.
-----------------------------------------------------------------
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo.example.com. <--
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo2.example.com.
_bar._http.example.com 60 IN SRV 5000 5000 20003 foo3.example.com.

ヘルスチェックはSRVレコードをループして上記の最初のレコードを探しますので、そのホスト名を知る必要があります。

使っているのは ヘリオス を使っているのですが、これが を追加していることがわかりました。 を追加し、そこからホスト名を取得できることがわかりました。しかし、私はちょうど私がHeliosなしでdockerを使用していた場合のために好奇心を持っていました。

どのように解決するのですか?

ホスト名を環境変数として渡すことができます。 また、/etc をマウントして、/etc/hostname を cat できるようにすることもできます。 しかし、私は Vitaly と同意します。これはコンテナの意図されたユースケースではないのです。