Подключение к многоузловому кластеру Couchbase на Docker в Java
Я создал первый сервер couchbase с помощью следующей команды:
docker run -d --name db1 -p 8091-8094:8091-8094 -p 11210:11210 couchbase
Второй сервер, который я создал без параметров для порта, потому что в противном случае Docker не сможет развернуть контейнер:
docker run -d --name db2 couchbase
Теперь я могу получить доступ к веб-консоли первого контейнера и создать кластер со вторым контейнером.
Проблема в том, что я не могу подключиться к созданному кластеру в Java, потому что порт 11210 не опубликован для второго контейнера. Я всегда получаю TimeoutException. Как я могу решить это?
2 ответа
Тебе придется expose
порты для второго контейнера также, как вы это делали в первом контейнере (эти "параметры" являются отображениями портов).
Скорее всего, вы не смогли запустить второй контейнер с параметрами, потому что вы пытались отобразить те же порты, что и в первом контейнере; ака, вы пробовали эту команду:
docker run -d --name db2 -p 8091-8094:8091-8094 -p 11210:11210 couchbase
Это не будет работать, потому что вы не можете использовать порты, которые уже используются. Так что попробуйте сопоставить с другим набором портов. Например:
docker run -d --name db2 -p 9091-9094:8091-8094 -p 11210:11210 couchbase
Обратите внимание, как я сейчас использую 9091-9094
вместо 8091-8094
, Вышеуказанная команда означает: map ports 8091-8094 from the container to ports 9091-9094 in the host
, Любые запросы отправлены на 9091-9094
на хосте будет перенаправлен на 8091-8094
внутри контейнера автоматически.
И тогда вы можете подключиться ко второму контейнеру, указав новые порты (9091-9094
).
Я предлагаю вам проверить основы докера, особенно документацию для port mapping
,
Наконец, я смог решить проблему, настроив виртуальные машины для серверов с бродягами. Таким образом, нет проблем иметь несколько экземпляров Couchbase с одинаковыми портами.