Python 两个Docker容器彼此不通信
我托管了OSRM服务器: 它的工作原理是,我在浏览时获得以下输出:Python 两个Docker容器彼此不通信,python,django,docker,osrm,Python,Django,Docker,Osrm,我托管了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>') B
{"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/'
当我用这个地址和必需的参数访问后端时,我得到的状态是:在Postman中无效。这两个容器似乎没有通信,但都在同一网络和同一服务器中
http://<ip address>/vrp/parse
http:///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
这将为您创建一个默认网络,并将容器连接到该网络。使用OSRM的主机(容器)名而不是ip,如果容器位于同一网络上,它们应该能够使用彼此的主机名相互通信。@nima在这种情况下,我应该能够从另一个容器ping容器名称no?但我不能ping你在ping哪个端口?您应该ping容器内的端口。在这种情况下:
9012:8090
您应该ping8090
,而不是9012
。而且,您可以在docker compose中为这些容器创建自己的网络,这太棒了
http://<ip address>/vrp/parse
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