数字海洋应用平台中MongoDB和Docker的服务器选择超时

问题描述 投票:0回答:1

从 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 网络上。

mongodb go docker-compose digital-ocean
1个回答
0
投票

根据 DigitalOcean 应用程序平台的文档和限制,由于多种限制,在应用程序平台内的容器中运行 MongoDB 实例似乎可能不可行。应用程序平台不支持持久存储或 VPC 网络,这可能会导致在容器中直接托管数据库时出现连接和数据丢失问题。

相反,我建议使用 DigitalOcean 的 MongoDB 托管数据库服务。此托管选项提供了必要的持久存储和网络配置,使其成为比应用程序平台更合适的数据库托管选择,特别是对于需要可靠数据存储和可用性的应用程序。

https://docs.digitalocean.com/products/app-platform/details/limits/

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.