mongodb - MongoDB Golang 驱动程序尝试连接到 localhost 而不是 docker 主机
问题描述
错误
app | 2020/07/14 13:19:00 server selection error: server selection timeout, current topology: { Type: Unknown, Servers: [{ Addr: localhost:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : dial tcp 127.0.0.1:27017: connect: connection refused }, ] }
我正在使用 docker-compose 来管理 golang 应用程序和 mongo db(没有副本集)实例。docker-compose 文件内容:
version: '3.1'
services:
mongodb:
image: mongo
container_name: mongodb
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: local
command: mongod --bind_ip mongodb
app:
image: app:1.4
container_name: app
environment:
- MONGO_URL=mongodb
ports:
- 80:8080
depends_on:
- mongodb
restart: always
运行 Docker 容器:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d130336be71e app:1.4 "/app/main" 4 minutes ago Up 2 seconds 0.0.0.0:80->8080/tcp app
dc57dd2de645 mongo "docker-entrypoint.s…" 4 minutes ago Up 2 seconds 0.0.0.0:27017->27017/tcp mongodb
用于连接 Golang 应用程序和 MongoDB
我正在使用官方 mongodb go 驱动程序(go.mongodb.org/mongo-driver/mongo),我的代码正在尝试连接到 docker 主机(mongodb):
var dbUser string = "root"
var dbPassword string = "local"
dbURL := os.Getenv("MONGO_URL")
clientOptions := options.Client()
clientOptions.SetDirect(true).ApplyURI("mongodb://" + dbUser + ":" + dbPassword + "@" + dbURL +":27017/?connect=direct")
故障排除
- 作为试图找出问题所在的一部分,我查看了 stackoverflow 中突出显示的类似问题并尝试了以下选项:
- 尝试在连接 URI 中使用 connect=direct
- 尝试使用SetDirect
- 添加了 --bindip 在我的 docker-compose 文件中突出显示
- 我登录到应用程序容器并尝试 ping mongodb 并且它有效:
root@d130336be71e:/app# ping mongodb
PING mongodb (172.18.0.2) 56(84) bytes of data.
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=1 ttl=64 time=0.159 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=2 ttl=64 time=0.200 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=3 ttl=64 time=0.079 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=4 ttl=64 time=0.087 ms
64 bytes from mongodb.app_default (172.18.0.2): icmp_seq=5 ttl=64 time=0.083 ms
^C
--- mongodb ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 60ms
rtt min/avg/max/mdev = 0.079/0.121/0.200/0.050 ms
在尝试了这些选项之后,我正在向 Golang 社区寻求帮助,因为我对 Golang 还很陌生。
提前致谢。
解决方案
推荐阅读
- python - 是否有用于纠正以下 TypeError 的 Python 函数?
- node.js - Node.js - 我不断收到以下错误:错误:ffmpeg 流:写入 EPIPE
- angular - ngx-markdown:如何在 [src]="xxx/xxx.md" 中手动设置文件类型?
- python-3.x - python3单元测试,修补实例方法的返回不起作用
- stripe-payments - Stripe Connect:关联账户可以成为客户吗?
- r - 在 Shiny Server 的 extendShinyjs 中导入导出
- r - 将值划分为类别
- angular - 角度谷歌地图更改原点纬度和经度
- java - 未加载资产 (libGDX)
- c# - 数据表用 null 替换不正确的行