2017-05-15 3 views
0

私たちのWebアプリケーションに私たちのサーバーのIPを送る必要がある機能がありますが、それはrequest.META['REMOTE_ADDR']の値ですので、いつも172.17.0.2を送ります。これは通常、127.0.0.1です。私が仮定しているのは、リクエストが来ているNGINXコンテナのTCPアドレスです。 代わりに私のドッカーホストのIPをどのように送信しますか?私のdjangoアプリケーションコンテナからホストIPを取得

コンテナ:

  • nginxの
  • ジャンゴgunicorn
  • PostgreSQLの
  • Redisの
+0

あなたのパブリックIPアドレスは欲しいですか?それは不明だ。 –

+0

申し訳ありませんが、ドッカーのホスト部分には注意を払っていませんでした。 –

答えて

2

作成時にコンテナに環境変数として渡します。次に、あなたのDjangoコードでその環境変数を読んでください。

-e HOST_IP=$(/sbin/ip route | awk '/default/ { print $3 }')docker runコマンドで実行できます。

docker-compose.ymlには、このようなことを行うことができます。

django: 
    environment: 
    - HOST_IP=$(/sbin/ip route | awk '/default/ { print $3 }') 
+0

環境変数を保存するために '.env'ファイルを使用すると、どうすればいいですか? –

+0

私の編集を確認してください:) – kstromeiraos

+0

どうすれば私の.env内でそれを行うことができますか?私はdocker-compose.ymlを使用しています。私は実際にそのようなマニュアルで動かない自動化されたものを探しています。ごめんなさい.. –

1

ではこれを試してみてください:

import subprocess 
host = subprocess.check_output(['bash', '-c', "/sbin/ip route|awk '/default/ { print $3 }'"]).decode('utf-8').strip() 
+0

返された '172.17.0.1' –

+0

ホストコンテナはNATの後ろにありますか? 172.17.0.1はNATアドレスです。サーバーのパブリックURLを取得したい場合、それは別のものです。 –

+0

おそらくはい、私のコンテナのネットワークはデフォルトでは 'bridge'です –

関連する問題