Go mon go - драйвер не может подключиться к контейнеру mongodb - PullRequest
2 голосов
/ 18 марта 2020

Я использую простой go CRUD API, который использует mongodb и перемещаю его в docker контейнеры. Я не могу подключиться к mongodb по какой-то причине. После исследования я не могу найти решение.

Я попытался:

  • Отображение / публикация портов, поэтому я могу использовать имя контейнера вместо 'mongodb: localhost: 27017 /' при попытке для подключения к клиенту.
  • Я также удалил любую сетевую конфигурацию в моем файле compose.yml, чтобы не было путаницы в сети.

Это мой файл compose.yml:

version: '3.4'

services:
    mongodb:
      image: mongo:4.0.4
      restart: always
      ports:
        - 27017:27017

    mongo_todo:
      build: ./mongo_todo
      ports: 
        - 3000:3000
      depends_on:
        - mongodb

    go_todo:
    build: ./go_todo
    ports:
      - 80:80
    depends_on:
      - mongo_todo

Это мой файл Docker mongo_todo:

FROM golang:1.14
WORKDIR /go/src/app
COPY . .

RUN go get -d -v ./...
RUN go install -v ./...

EXPOSE 80

И вот как я пытаюсь подключиться к клиенту:

// Set client options
clientOptions := options.Client().ApplyURI("mongodb://mongodb:27017")

// Connect to MongoDB
Client, _ = mongo.Connect(context.TODO(), clientOptions)

// Check the connection
err := Client.Ping(context.TODO(), nil)
if err != nil {
    log.Fatal(err)
}

Программа входит в систему ошибка Fatel при попытке пропинговать клиента для проверки соединения.

Вывод журнала:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x2e0 pc=0x9a798c]
goroutine 1 [running]:
go.mongodb.org/mongo-driver/mongo.(*Client).Ping(0x0, 0xd61e20, 0xc000028030, 0x0, 0x1, 0x0)
/go/src/go.mongodb.org/mongo-driver/mongo/client.go:229 +0x21c
main.main()
/go/src/app/main.go:30 +0x16f

Я понимаю, что это какая-то проблема с сетью, но я понятия не имею, почему не работает, и у меня есть ощущение, что я упускаю что-то простое.

Пожалуйста, попросите меня, если потребуется, дополнительную информацию и заранее спасибо за любую помощь.

Редактировать: я могу проверить связь имя хоста mongodb из моего контейнера go_todo o не уверен, что это проблема сети.

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Да, это немного запутанная (читай: раздражающая) часть использования docker -compose.

Служба mongodb - это не то, что в имени контейнера вы задаете ApplyURI к. docker -compose добавляет префикс «имя проекта» к имени контейнера.

Запустите docker ps и найдите столбец «Имена» (должен быть последним). Используйте имя вашего экземпляра mongodb для хоста URI, и он должен подключиться.

0 голосов
/ 19 марта 2020

Я так глуп и явно docker noob.

Я думал, что docker-compose up перестроил мои изображения контейнера, но это не так, и мои изменения не использовались.

Спасибо за ваши комментарии, хотя я ценю это!

...