从我的django应用程序容器获取主机IP

从我的django应用程序容器获取主机IP,django,nginx,docker,Django,Nginx,Docker,我们的web应用程序上有一个功能,我们需要发送服务器的IP,但我总是发送172.17.0.2,因为这是request.META['REMOTE\u ADDR'的值在localhost中使用django时,它通常是127.0.0.1,我假设它是请求来自的NGINX容器的TCP地址我将如何发送docker主机的IP? 容器: Nginx 德扬戈与古尼科恩 PostgreSQL 雷迪斯 试试这个: import subprocess host = subprocess.check_output(['

我们的web应用程序上有一个功能,我们需要发送服务器的IP,但我总是发送
172.17.0.2
,因为这是
request.META['REMOTE\u ADDR'的值
在localhost中使用django时,它通常是
127.0.0.1
,我假设它是请求来自的NGINX容器的TCP地址我将如何发送docker主机的IP?

容器:

  • Nginx
  • 德扬戈与古尼科恩
  • PostgreSQL
  • 雷迪斯
试试这个:

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

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

创建容器时,将其作为环境变量传递给容器。然后,在Django代码中读取该环境变量

您可以在
docker run
命令中使用选项
-e HOST_IP=$(/sbin/IP route | awk'/default/{print$3}')

在docker compose.yml中,您可以这样做

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

创建容器时,将其作为环境变量传递给容器。然后,在Django代码中读取该环境变量

您可以在
docker run
命令中使用选项
-e HOST_IP=$(/sbin/IP route | awk'/default/{print$3}')

在docker compose.yml中,您可以这样做

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


你只是想要你的公共IP地址吗?不清楚。抱歉,没有注意docker主机部分。您只是想要您的公共IP地址吗?不清楚。抱歉,没有注意docker主机部分。它返回了
172.17.0.1
您的主机容器在NAT后面吗?172.17.0.1是NAT地址。如果你想获取服务器的公共URL,那就不一样了。很可能是的,我的容器的网络是默认的,
bridge
如果你需要你的公共IP,你可能需要使用外部来源,比如从ipify.org。看起来你已经接受了另一个答案,所以我想这是可行的。老实说,ipify是我解决这个问题的主要方法,我只想知道其他方法。但是非常感谢你的回答和评论!它返回
172.17.0.1
您的主机容器在NAT后面吗?172.17.0.1是NAT地址。如果你想获取服务器的公共URL,那就不一样了。很可能是的,我的容器的网络是默认的,
bridge
如果你需要你的公共IP,你可能需要使用外部来源,比如从ipify.org。看起来你已经接受了另一个答案,所以我想这是可行的。老实说,ipify是我解决这个问题的主要方法,我只想知道其他方法。但是非常感谢你的回答和评论!当我使用
.env
文件来存储我的环境变量时,我该如何做到这一点?那么我该如何在.env中做到这一点呢?我正在使用docker-compose.yml。我实际上在寻找一种自动化的东西,而不是像那样的手动操作。。抱歉..我刚刚在docker-compose.yml.Wow中添加了一个示例,说明了如何在docker-compose.yml.Wow中实现这一点,不妨尝试一下这一点。当我使用
.env
文件存储环境变量时,如何实现这一点?那么我如何在.env中实现这一点呢?我正在使用docker-compose.yml。我实际上在寻找一种自动化的东西,而不是像那样的手动操作。。对不起,我刚刚在docker-compose.yml.Wow中添加了一个示例,说明了如何在docker-compose.yml.Wow中实现这一点,不妨试试这个