Para oferecer suporte ao failover e à reconfiguração do conjunto de réplicas, os clientes com uma conexão de conjunto de réplicas use os nomes de host conforme configurado no conjunto de réplicas conforme exigido pelo Server Discovery do MongoDB e Monitoramento (SDAM) . Isso garante que a visualização do cliente do conjunto de réplicas seja consistente com a configuração e o status do conjunto de réplicas.
I'm able to connect to each node individually, just not as a replica set from outside.
Esse é o comportamento esperado se o host / porta externa for diferente da configuração do conjunto de réplicas. Se você se conectar a um servidor único (ou seja, não especificar uma conexão de conjunto de réplicas), os clientes não farão nenhuma descoberta de servidor. Isso pode ser útil para conectar-se a um membro específico do conjunto de réplicas para fins de backup ou administração ou evitar a descoberta do servidor quando você estiver se conectando por meio de uma combinação de nome ou host encaminhado que não corresponda à configuração do conjunto de réplica.
Com uma conexão de conjunto de réplicas, os clientes se conectam e executam o isMaster
command para descobrir o configuração atual e estado do conjunto de réplicas. De acordo com a especificação do SDAM, os clientes configuram o monitoramento do conjunto de réplicas para que quaisquer alterações na configuração ou no status sejam detectadas automaticamente pelo cliente.
Mongo1: Published port: 1234->27017 Mongo2: Published port: 1235->27017 Mongo3: Published port: 1236->27017
Para usar uma conexão de conjunto de réplicas com as portas do Docker expostas, você precisará:
- Verifique se os nomes de host usados na configuração do conjunto de réplicas (
Mongo1
,Mongo2
,Mongo3
) podem ser resolvidos no contêiner do qual você está tentando se conectar. - Torne as portas nas imagens do Docker exclusivas e exponha as mesmas portas em seu ambiente de host (por exemplo: 27017, 27018, 27019).
Parece que você já tem resolução de nome funcionando corretamente se puder se conectar a partir do contêiner de seu aplicativo, mas as portas na sua configuração de conjunto de réplicas não correspondem ao que você expôs por meio do Docker.