【发布时间】:2021-11-08 18:09:06
【问题描述】:
这是我的 docker compose:
version: "3.9"
services:
app:
container_name: app
build:
context: ./..
dockerfile: deployments/Dockerfile
env_file:
- ../configs/config.env
ports:
- ${APP_PORT:-8080}:8080
networks:
- network
restart: always
db:
image: mongo:latest
container_name: mongodb
restart: always
env_file:
- ../configs/config.env
ports:
- ${MONGODB_PORT:-27017}:27017
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGODB_ROOT_USER:-admin}
MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_ROOT_PASSWORD:-admin}
volumes:
- ../assets/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh
adminer:
image: adminer
container_name: db-adminer
restart: always
ports:
- ${ADMINER_PORT:-17860}:8080
networks:
- network
depends_on:
- db
networks:
network:
driver: bridge
这是我的 mongo-init.sh 文件:
use newdb
db.createUser(
{
user: admin,
pwd: admin,
roles: [
{
role: "readWrite",
db: "newdb"
}
]
}
);
这里我尝试连接数据库,但出现以下错误:topology is connected or connected
client, err := mongo.Connect(ctx, options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%s@%s:%s",
cfg.DbUsername, cfg.DbPassword, cfg.DbHost, cfg.DbPort)))
我不明白错误可能是什么,因为 env 文件中的一切都很好,并且所有变量都与 mongo 中的身份验证参数匹配
【问题讨论】:
-
该错误似乎表明您多次调用
mongo.Connect。如果您已经连接,任何进一步的调用都将返回此错误。所以这似乎是一个软件问题,而不是设置/部署问题。 github.com/mongodb/mongo-go-driver/blob/master/x/mongo/driver/… -
@caveman 我检查了你写的内容,但没有解决问题,因为此时我是第一次连接到 mongo
-
据我所知,这是返回此错误的唯一位置。 github.com/mongodb/mongo-go-driver/blob/…。我建议你设置 delve 或 gdb 并设置一些断点来诊断你为什么会陷入这个陈述
-
您没有提到 Mongo DB 的网络。我相信它将使用默认网络,而其他容器位于不同的网络中,这就是您的应用无法连接到 Mongo DB 的原因。
-
请检查所有容器是否在同一个网络中。
标签: mongodb docker go docker-compose