Docker gremlin-server: «Невозможно назначить запрошенный адрес» - PullRequest
0 голосов
/ 02 февраля 2019

Я довольно зелен с Docker, так что прости меня, если это очевидно.

У меня есть два док-контейнера, с которыми я пытаюсь поговорить.Один запускает экземпляр gremlin-server прямо из коробки.Я запустил его с помощью команды docker run --name="gremlin-server" -p 8182:8182 tinkerpop/gremlin-server

Другой выполняет лямбда-функцию, используя lambci .Для запуска моей основной тестовой функции я использую команду docker run --rm -v "$PWD"/lambda:/var/task -v "$PWD"/layer:/opt lambci/lambda:python3.6 test_containers.lambda_handler

Вот мой код test_containers.py:

from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
from gremlin_python.process.anonymous_traversal import traversal


def lambda_handler(event, context):
    gremlin_url = 'ws://localhost:8182/gremlin'
    g = traversal().withRemote(DriverRemoteConnection(gremlin_url, 'g'))

Вот ошибка, которую я получаю от лямбда-функции:

{
   "errorMessage":"[Errno 99] Cannot assign requested address",
   "errorType":"OSError",
   "stackTrace":[
      [
         "/var/task/test_containers.py",
         7,
         "lambda_handler",
         "g = traversal().withRemote(DriverRemoteConnection(gremlin_url, 'g'))"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/driver_remote_connection.py",
         45,
         "__init__",
         "password=password)"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/client.py",
         76,
         "__init__",
         "self._fill_pool()"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/client.py",
         92,
         "_fill_pool",
         "conn = self._get_connection()"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/client.py",
         105,
         "_get_connection",
         "self._transport_factory, self._executor, self._pool)"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/connection.py",
         40,
         "__init__",
         "self.connect()"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/connection.py",
         46,
         "connect",
         "self._transport.connect(self._url)"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/gremlin_python/driver/tornado/transport.py",
         33,
         "connect",
         "lambda: websocket.websocket_connect(url))"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/tornado/ioloop.py",
         458,
         "run_sync",
         "return future_cell[0].result()"
      ],
      [
         "/opt/python/lib/python3.6/site-packages/tornado/concurrent.py",
         238,
         "result",
         "raise_exc_info(self._exc_info)"
      ],
      [
         "<string>",
         4,
         "raise_exc_info",
         ""
      ],
      [
         "/opt/python/lib/python3.6/site-packages/tornado/iostream.py",
         1117,
         "connect",
         "self.socket.connect(address)"
      ]
   ]
}

Так что я не уверен, если.Я использую правильный URL для доступа к серверу, и б.Мне нужно сделать еще несколько настроек, чтобы заставить их говорить.

Я запускаю докер в Windows.Я мог бы настроить виртуальную машину Ubuntu для их запуска, но это кажется ... избыточным.Любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 июня 2019

Вместо gremlin_url = 'ws: // localhost: 8182 / gremlin' попробуйте gremlin_url = 'ws: //host.docker.internal: 8182 / gremlin' или любым другим именем хоста вашего док-контейнера.

...