从 Docker Hub 部署到 Digital Ocean App Platform 时,我遇到了 MongoDB 和 Docker 的问题。
这是控制台的错误输出:
server selection error: server selection timeout, current topology: { Type: Unknown, Servers: [{ Addr: mongo:27017, Type: Unknown, Last error: dial tcp: lookup mongo on 10.245.0.11:53: no such host }, ] }
我的 docker-compose.yml 看起来像这样:
version: '3.8'
services:
app:
build: .
container_name: app
ports:
- "8080:8080"
depends_on:
- mongo
environment:
MONGO_URL: "mongodb://****:****@mongo:27017/db?authSource=admin&directConnection=true"
volumes:
- ./data/db:/data/db
command: ["./app"]
networks:
- app-network
mongo:
image: mongo:6.0
restart: always
container_name: mongodb
environment:
MONGO_INITDB_ROOT_USERNAME: *****
MONGO_INITDB_ROOT_PASSWORD: *****
ports:
- "27017:27017"
volumes:
- /mnt/data/mongo_db_data:/data/db
networks:
- app-network
networks:
app-network:
driver: bridge
在 Go 代码中,我使用:
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
mongoURL := os.Getenv("MONGO_URL")
clientMongo, err := mongo.Connect(ctx, options.Client().ApplyURI(mongoURL))
if err != nil {
panic(err)
}
关于可能导致此问题的原因有什么想法吗?
我希望应用程序能够成功连接到 MongoDB,但它却抛出服务器选择超时错误。我尝试在 MongoDB 连接字符串中使用 directConnection=true,并确保容器位于同一 Docker 网络上。
根据 DigitalOcean 应用程序平台的文档和限制,由于多种限制,在应用程序平台内的容器中运行 MongoDB 实例似乎可能不可行。应用程序平台不支持持久存储或 VPC 网络,这可能会导致在容器中直接托管数据库时出现连接和数据丢失问题。
相反,我建议使用 DigitalOcean 的 MongoDB 托管数据库服务。此托管选项提供了必要的持久存储和网络配置,使其成为比应用程序平台更合适的数据库托管选择,特别是对于需要可靠数据存储和可用性的应用程序。
https://docs.digitalocean.com/products/app-platform/details/limits/