无法在Docker Compose中连接到Mongo Atlas Cloud

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

我有一个执行基本CRUD操作并使用MongoDB进行数据持久化的Go应用。

我正在使用Mongo Atlas连接字符串将应用程序连接到MongoDB,当我在本地开发机上运行应用程序时,一切正常。但是,当我将所有内容推送到docker容器时,在docker-compose工作流程中,我开始收到此错误:

server selection error: server selection timeout, current topology: { Type: ReplicaSetNoPrimary, Servers: [{ Addr: app-test-shard-00-00-zfzs6.mongodb.net:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : x509: certificate signed by unknown authority }, { Addr: app-test-shard-00-01-zfzs6.mongodb.net:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : x509: certificate signed by unknown authority }, { Addr: app-test-shard-00-02-zfzs6.mongodb.net:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : x509: certificate signed by unknown authority }, ] }

这是我的docker-compose.yml外观:

services: 
redis:
    image: redis
    restart: always
app:
    image: docker.pkg.github.com/<user>/<project>/<image>:latest
    ports: 
        - 80:8080
    environment: 
        - APP_ENV=docker
        - GIN_MODE=release
    depends_on: 
        - redis
    restart: on-failure

这是我的连接字符串的外观:mongodb://user:[email protected]:27017,app-test-shard-00-01-zfzs6.mongodb.net:27017,app-test-shard-00-02-zfzs6.mongodb.net:27017/test?ssl=true&replicaSet=app-test-shard-0&authSource=admin&retryWrites=true&w=majority

我已经检查了this问题和其他几个问题,但似乎都没有解决这个问题。

我还检查了docker的网络配置,我正在使用网桥驱动程序,该驱动程序应允许访问外部应用程序(例如Mongo Atlas)

Go版本:1.13

Mongo驱动程序:mongodb / mongo-go-driver v1.2.0

Dockerfile

FROM golang:alpine as builder
WORKDIR /build
COPY . .
RUN apk add git openssh build-base
RUN git config --global url."[email protected]:".insteadOf "https://github.com/"
COPY keys/id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
RUN ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts
ENV GOPRIVATE=github.com/contributor-org
RUN go build

FROM alpine
WORKDIR /org
COPY --from=builder /build/app .
COPY config/*.yml config/
RUN mkdir -p /var/log
CMD ["./app"]
mongodb docker go docker-compose
1个回答
0
投票

问题似乎与证书验证有关。您有两种选择:-将自签名证书添加到CA。-跳过验证。

如果要跳过自签名证书验证,则必须将ClientOptions结构设置修改为true ClientOptions.SSLInsecure变量。

© www.soinside.com 2019 - 2024. All rights reserved.