func GetDatabase() (database *mongo.Database, ctx context.Context, err error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://mongodb:27017"))
if err != nil {
log.Println("database connection error", err)
return nil, nil, err
}
err = client.Ping(context.TODO(), readpref.Primary())
if err != nil {
log.Println("err", err)
return
}
log.Println("Successfully connected and pinged.")
dbName := GetDatabaseName()
database = client.Database(dbName)
log.Println(dbName, database.Name())
return
}
This golang app is running on one container and mongodb on other. Above is my function for checking the database connection. After reading some suggestions on internet I am trying to use container name instead of localhost. Please provide your inputs on Dockerfile or docker-compose file.
Dockerfile
FROM golang:1.18 AS builder
WORKDIR /app
COPY . .
ENV CGO_ENABLED=0
RUN go build -o main .
FROM alpine:latest
COPY --from=builder /app ./
EXPOSE 8080
ENTRYPOINT ["./main"]
docker-compose
version: '3.7'
services:
db:
image: mongo
restart: always
platform: linux/x86_64
networks:
- default
ports:
- "27017:27017"
container_name: mongodb
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
depends_on:
- db
on running these two containers, app container will give db connection error.