首页 > 解决方案 > 两个 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 还显示了同一网络中的两个容器。可能是什么原因?谢谢

标签: pythondjangodockerosrm

解决方案


你考虑过使用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

这将为您创建一个默认网络并将容器连接到它。


推荐阅读