python - 两个 Docker 容器不相互通信
问题描述
我已经托管了 OSRM 服务器:https ://hub.docker.com/r/osrm/osrm-backend/
docker run -t -i --network="test-net" -p 5000:5000 -v "${PWD}:/data" osrm/osrm-backend osrm-routed --algorithm mld /data/indonesia-latest.osrm
它的工作原理是我在浏览它时得到以下输出:
{"message":"URL string malformed close to position 1: \"\/\"","code":"InvalidUrl"}
后端是使用 Django 制作的,下面的代码应该会访问 OSRM 服务器并给出响应:
BACKEND_HOST = os.getenv('WEB_VRP_BACKEND_HOST', '<ip address of osrm hosted server>')
BACKEND_PORT = os.getenv('WEB_VRP_BACKEND_PORT', '5000')
request = 'http://' + BACKEND_HOST + ':' + BACKEND_PORT + '/table/v1/driving/'
OSRM 和 Django 都托管在同一服务器和同一网络中。后端使用 docker 构建并运行
docker run --name vrp-backend --network="test-net" -d -p 9012:8090 vrp-web-django
当我使用此地址和所需参数访问后端时,我得到状态:在 Postman 中无效。这两个容器似乎没有通信,但都在同一个网络和同一个服务器中。
http://<ip address>/vrp/parse
我创建了桥接的测试网网络。并且 docker inspect 还显示了同一网络中的两个容器。可能是什么原因?谢谢
解决方案
你考虑过使用docker-compose
吗?您可以更轻松地使用docker-compose build
和构建和运行多个容器docker-compose up
。yaml 文件可能如下所示:
version: "2.2"
services:
vrp-backend:
restart: always
build: path/to/dockerfile # or image: image_name:latest
command: python3 manage.py runserver
ports:
- '9012:8090'
links:
- 'osrm:osrm'
osrm:
image: osrm/osrm-backend
command: osrm-routed --algorithm mld /data/indonesia-latest.osrm
这将为您创建一个默认网络并将容器连接到它。
推荐阅读
- java - 如何在 Project Reactor 中将 Mono 多播给多个订阅者?
- python - 我正在尝试为“空间”到“~”的 Ascii 值创建一个 Vigenere 密码,
- node.js - 仅连接匹配的元素
- cucumber - 如何在 Cucumber 7 中映射枚举和字符串的映射
- python - 如何标记满足某些标准的每个组的第一个条目?
- react-native - 如何创建带有嵌套滚动视图(如 twitter 或 instagram 个人资料屏幕)的粘性选项卡选择器 [REACT-NATIVE]
- php - 项目 laravel 指向特定文件夹 .Htaccess
- spring - Bean注解抽象方法——用spring实现工厂方法
- variables - 带有逻辑运算符的变量属性(JS 上的示例)
- laravel - 将 json 数组存储在 api 控制器中 -laravel 8