我有一个两个容器,以及如何使用 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/