Не удается подключиться к док-контейнеру mongodb в экземпляре aws - PullRequest
0 голосов
/ 08 октября 2018

Я создал новую сеть докеров на своем экземпляре AWS EC2 с помощью

docker network create testnet

У меня есть следующий docker-compose:

version: '2'

services:
  mongodb:
    image: mongo:3
    container_name: mongodb
    environment:
      - MONGO_DATA_DIR=/data/db
      - MONGO_LOG_DIR=/dev/null
    volumes:
      - mongodb_data_db:/data/db
    ports:
      - 27017:27017
    command: mongod --smallfiles --logpath=/dev/null --replSet rs0 # --quiet

volumes:
  mongodb_data_db:

networks:
  default:
    external:
      name: testnet

Второй контейнер, работающий в той же сети,попытка подключиться к mongodb с помощью этого docker-compose:

version: "2"
services:
  monstache:
    image: rwynn/monstache
    container_name: monstache
    command: -mongo-url=mongodb -elasticsearch-url=http://elasticsearch:9200 -direct-read-namespace=db.heartbeat -direct-read-split-max=2

networks:
  default:
    external:
      name: testnet

Это сработало с тех пор, как AWS в последний раз решил перезагрузить мой экземпляр.После этого мне снова пришлось перезапустить все контейнеры, но с тех пор я получаю сообщение об ошибке из контейнера monstache, в котором говорится:

Unable to connect to MongoDB using URL MongoDB: timed out after 15 seconds

Что означает, что я каким-то образом не могу получить доступ к контейнеру MongoDB.Кроме того, другой контейнер в сети больше не может подключаться к «mongodb», поэтому я не думаю, что это проблема только с контейнером «monstache».Кажется, что-то изменилось в моей системе докеров в целом.По крайней мере, когда я бегу.

docker network inspect testnet

Я вижу, что все контейнеры перечислены.

Что я сделал до сих пор:

  • Перезапущен Docker Service (много раз)
  • Вручную удалили и создали Docker Network (также с новым именем)
  • Docker System Prune

Очень нужна помощь, потому что я застрял сейчас2 дня, пытаясь решить эту проблему: (


ОБНОВЛЕНИЕ: docker-compose.yml для Elasticsearch (и Kibana)

version: "2"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.4.1
    container_name: elasticsearch
    volumes:
      - elasticsearch:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
  kibana:
    image: docker.elastic.co/kibana/kibana:6.4.1
    container_name: kibana
    depends_on:
      - elasticsearch
    environment:
      ELASTICSEARCH_URL: http://elasticsearch:9200
    ports:
      - 5601:5601

volumes:
  elasticsearch:
    driver: local

networks:
  default:
    external:
      name: testnet

ОБНОВЛЕНИЕ: Docker Network проверяет testnet

:~$ docker network inspect testnet
[
  {
    "Name": "testnet",
    "Id": "448018003d92c8802dd701931e21da018618abce360a147808a5c6b4b51f4b6d",
    "Created": "2018-10-08T12:40:10.163231318Z",
    "Scope": "local",
    "Driver": "bridge",
    "EnableIPv6": false,
    "IPAM": {
      "Driver": "default",
      "Options": {},
      "Config": [
        {
          "Subnet": "172.18.0.0/16",
          "Gateway": "172.18.0.1"
        }
      ]
    },
    "Internal": false,
    "Attachable": false,
    "Containers": {
      "34df14ddf4ef004115b6e66b35177356a7c0c5e5d0d94d2c05406aa61cd1d744": {
        "Name": "kibana",
        "EndpointID": "bb38deafbd1929d268ba55c8fb28064d9b0afe7bbfb95289a6893ca62f91ff8b",
        "MacAddress": "02:42:ac:12:00:03",
        "IPv4Address": "172.18.0.3/16",
        "IPv6Address": ""
      },
      "95034d04c4f6c07527f725436a84b20a1514d8aaf70d4e19c54344eb07c7632f": {
        "Name": "elasticsearch",
        "EndpointID": "269e42333b20dd01152f58329c87060059471a8ea68e3cd97cb45c502b102879",
        "MacAddress": "02:42:ac:12:00:02",
        "IPv4Address": "172.18.0.2/16",
        "IPv6Address": ""
      },
      "c3153881f2a8925bb74718afa9b33c5e9cfcc10f58b2fa7a5157e45b83bea343": {
        "Name": "mongodb",
        "EndpointID": "44c6ac5755897c056d7285eba83a0934e1871b6c2ca671cbbe846fc55e23ff3e",
        "MacAddress": "02:42:ac:12:00:04",
        "IPv4Address": "172.18.0.4/16",
        "IPv6Address": ""
      }
    },
    "Options": {},
    "Labels": {}
  }
]

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Я исправил свою проблему.

Поскольку я запускаю mongod с

--replSet rs0

после перезагрузки, мне как-то пришлось заново создать экземпляр реплики mongodb.После использования

mongo --eval "rs.initiate()"

на контейнере mongodb мне удалось подключиться из других контейнеров по URL-адресу службы контейнера mongodb.

Это также причина, по которой это произошло после перезагрузки.Кажется, что я должен повторно инициировать набор репликации всегда после перезагрузки происходит.На самом деле я думал, что это должно быть сохранено в каталоге томов mongodb, поэтому перезагрузка не повлияет на это ... Но, похоже, я ошибался:)

Спасибо всем за потраченное время.

0 голосов
/ 08 октября 2018

Попробуйте, порядок имеет значение, в основном начиная с нуля ... (скопируйте и вставьте все сразу)

docker-compose kill

docker-compose down

docker rm $(docker ps -aq)

docker network rm $(docker network ls)

docker volume rm $(docker volume ls --format {{.Name}})

docker-compose up --force-recreate

Если возможно, вам следует избегать использования ip-адресов для реплик.

Имена хостов

Используйте логическое DNS-имя хоста вместо IP-адреса, особенно при настройке элементов набора реплик или сегментированных элементов кластера.Использование логических DNS-имен хостов позволяет избежать изменений конфигурации из-за изменений IP-адресов.

Дополнительная информация -> replica-set-architectures

You не должен запускаться после перезагрузки, если все узлы не закрыты одновременно.Я предполагаю, что это то, что произошло, если все контейнеры работают на 1 экземпляре.

Если вы оставите один из них, и в конфигурационном файле будет установлено replSet, остальные автоматически присоединятся.

Для обеспечения высокой доступности рассмотрите возможность запуска набора реплик в Swarm.Вот хорошее пошаговое руководство по настройке набора реплик с помощью роя.

...