2017-04-20 4 views
1

私のアプリケーション要件に応じて、私はPythonプログラムからサーバーIPとサーバー名を取得する必要があります。しかし、私のアプリケーションは、Ubuntu上の特定のドッカーコンテナの中にあります。Pythonプログラムからドッカーコンテナ内のホスト名を取得する

私は

import os 
os.system("hostname") # to get the hostname 
os.system("hostname -i") # to get the host ip 

以下の出力のように試してみました: 2496c9ab2f4a172.*.*.*

しかし、それは、上記のようにプライベートIPアドレスだとして、それがドッキングウィンドウのContainerIDのとHOST_IPを常駐だとして、それは、ホスト名を与えています。私はそれがサーバー名であるので、ホスト名が必要です。しかし、これらのコマンドを端末に入力すると、私が望む結果を得ることができます。

答えて

1

このようにホストシステムの名前を取得することはできません。これを得るには、Dockerfileに環境変数を定義するか、コンテナを実行する(-eオプション)ことができます。

docker run -it -e "HOSTNAME=$(cat /etc/hostname)" <image> <cmd> 
:別の方法として、あなたは...

を容器の中に、あなたのホスト/etc/hostnameファイルをマウントし、またはそれをコピーすることができますこれは私がコンテナ内のホストのホスト名に環境変数HOSTNAMEを設定するために使用例を実行コマンドです

pythonでは、os.environ["HOSTNAME"]を実行してホスト名を取得できます。 は限りIPアドレスが行くように、私は、実行中のコンテナから取得取得するには、このコマンドを使用します。

route -n | awk '/UG[ \t]/{print $2}' 

あなたは、このコマンドを使用できるようにルートをインストールする必要があります。パッケージnet-toolsに含まれています。 apt-get install net-tools

+0

ご意見ありがとうございます。私は実行中のコンテナに環境変数にホスト名を追加しようとしました。それは私の命令を受け入れていない。私のコマンドは__dockerが実行されている -e HOST_HOSTNAME = 'ホスト名' __そしてIPに来ると、__ipgetter.myip()のようなipgetterモジュールを使って取得できます__ –

+0

あなたのコマンドを受け入れていないということはどういう意味ですか? – Anis

関連する問題