Я использую простой 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 не уверен, что это проблема сети.