python-3.x - Docker-compose 在 python 文件中使用服务名称访问容器?

标签 python-3.x django-rest-framework docker-compose

我有一个两个容器,以及如何使用 django Web 服务器访问 python 文件中的另一个容器

Docker-compose.yml 文件

version: '2'

services:

  web:
    build: ./web/
    command: python3 manage.py runserver 0.0.0.0:8001
    volumes:
      - ./web:/code
    ports:
      - "8001:80"
    networks:
      - dock_net
    container_name: con_web
    depends_on:
      - "api"
    links:
      - api
  api:
    build: ./api/
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./api:/code
    ports:
      - "8000:80"
    networks:
      - dock_net
    container_name: con_api

networks:
  dock_net:
      driver: bridge

蟒文件:

我可以从表单中获取 mail_string
   mail = request.POST.get('mail_string', '') 
   url = 'http://con_api:8000/api/'+mail+'/?format=json'
   resp = requests.get(url=url)         
   return HttpResponse(resp.text)

我请求 api 容器并获得值(value),但我不知道 ip 地址

最佳答案

更新答案

在你的 python 文件中,你可以使用 url = 'http://api/'+mail+'/?format=json' .这将使您能够访问您试图从中获取请求的 url。

原答案

如果两个容器是独立的,那么可以创建一个network并且当您使两个容器成为同一网络的一部分时,您可以使用它们的主机名访问它们,您可以通过 --hostname=HOSTNAME 指定该主机名。 .

另一种简单的方法是使用 docker-compose 文件,它默认创建一个网络,文件中声明的所有服务都是该网络的一部分。通过这种方式,您可以通过服务名称访问其他服务。简直就像http://container1/当你的 docker-compose 文件是这样的:

version: '3'
services:

  container1:
    image: some_image

  container2:
    image: another_or_same_image

现在通过以下方式进入 container2:
docker exec -it container2 /bin/bash
并运行 ping http://contianer1
您将收到数据包,因此可以访问其他容器。

关于python-3.x - Docker-compose 在 python 文件中使用服务名称访问容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45423908/

相关文章:

python - Windows 10 中的 subprocess.call() 返回找不到文件的错误

Docker-compose 找不到合适的文件,即使它存在

docker - 您如何使用 docker-compose v3.1 管理 secret 值?

python - 将Ubuntu上的python3连接到SQL Server 2014

python - 将动态属性添加到类,而不是实例

Python 在进程列表中检测 python 脚本的名称

python - django-rest-framework 非基于 orm 的过滤

django - 在 Django REST 框架中进行 SlugField 验证的推荐方法是什么?

python - 500错误: null value in column "timeline_id" violates not-null constraint

django - docker-compose django应用程序找不到Postgresql数据库