当前位置: 首页 > 知识库问答 >
问题:

在k8s中连接mongo-express到mongoDb失败

齐财
2023-03-14

我用用户名和密码配置了mongodb,并部署了mongodb和mongodb express。问题是,我在mongo express日志中发现以下错误:

无法使用connectionString连接到数据库:mongodb://username:password@mongodb://lc-mongodb-service:27017:27017/"

我可以看到连接字符串两次包含27017端口,中间还包含不应该存在的“mongodb://”。

这是我的mongo express部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: lc-mongo-express
  labels:
    app: lc-mongo-express
spec:
  replicas: 1
  selector:
    matchLabels:
      app: lc-mongo-express
  template:
    metadata:
      labels:
        app: lc-mongo-express
    spec:
      containers:
      - name: lc-mongo-express
        image: mongo-express
        ports:
        - containerPort: 8081
        env:
        - name: ME_CONFIG_MONGODB_SERVER
          valueFrom: 
            configMapKeyRef:
              name: lc-configmap
              key: DATABASE_URL
        - name: ME_CONFIG_MONGODB_ADMINUSERNAME
          valueFrom:
            secretKeyRef:
              name: lc-secret
              key: MONGO_ROOT_USERNAME
        - name: ME_CONFIG_MONGODB_ADMINPASSWORD
          valueFrom:
            secretKeyRef:
              name: lc-secret
              key: MONGO_ROOT_PASSWORD
---
apiVersion: v1
kind: Service
metadata:
  name: lc-mongo-express-service
spec:
  selector:
    app: lc-mongo-express
  type: LoadBalancer  
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081

和我的mongoDb部署:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: lc-mongodb-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  volumeMode: Filesystem
  storageClassName: gp2
---
apiVersion: apps/v1
kind: StatefulSet
metadata: 
  name: lc-mongodb
  labels: 
    app: lc-mongodb
spec: 
  replicas: 1
  serviceName: lc-mongodb-service
  selector: 
    matchLabels: 
      app: lc-mongodb
  template: 
    metadata: 
      labels: 
        app: lc-mongodb
    spec: 
      volumes:
        - name: lc-mongodb-storage
          persistentVolumeClaim:
            claimName: lc-mongodb-pvc
      containers: 
        - name: lc-mongodb
          image: "mongo"
          ports: 
          - containerPort: 27017
          env:
          - name: MONGO_INITDB_ROOT_USERNAME
            valueFrom:
              secretKeyRef:
                name: lc-secret
                key: MONGO_ROOT_USERNAME
          - name: MONGO_INITDB_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: lc-secret
                key: MONGO_ROOT_PASSWORD
          command:
          - mongod
          - --auth
          volumeMounts:
            - mountPath: '/data/db'
              name: lc-mongodb-storage
---
apiVersion: v1
kind: Service
metadata:
  name: lc-mongodb-service
  labels:
    name: lc-mongodb
spec:
  selector:
    app: lc-mongodb
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

我做错了什么?

共有1个答案

谢高峯
2023-03-14

您的连接字符串格式错误

你应该试试

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

现在假设您使用的是节点js

const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb+srv://<username>:<password>@<Mongo service Name>/<Database name>?retryWrites=true&w=majority";
const client = new MongoClient(uri, { useNewUrlParser: true });
client.connect(err => {
    // creating collection
    const collection = client.db("test").collection("devices");
    // perform actions on the collection object
    client.close();
});

在使用PVC和配置路径时,您还缺少命令中的Db路径args:["--dbpath","/data/db"]

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: mongo
  name: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: mongo
    spec:
      containers:
      - image: mongo
        name: mongo
        args: ["--dbpath","/data/db"]
        livenessProbe:
          exec:
            command:
              - mongo
              - --disableImplicitSessions
              - --eval
              - "db.adminCommand('ping')"
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 6
        readinessProbe:
          exec:
            command:
              - mongo
              - --disableImplicitSessions
              - --eval
              - "db.adminCommand('ping')"
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 6
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongo-creds
              key: username
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongo-creds
              key: password
        volumeMounts:
        - name: "mongo-data-dir"
          mountPath: "/data/db"
      volumes:
      - name: "mongo-data-dir"
        persistentVolumeClaim:
          claimName: "pvc"
 类似资料:
  • 问题内容: 我想运行一个使用express并连接到(boot2docker)docker mongo容器的节点应用程序。 当我第一次编写应用程序时,我使用的是本地安装的mongodb实例,并且以下配置有效: 它按预期运行。 现在,我尝试将其替换为mongo的docker实例。 因此,我已完成以下步骤以使mongo运行: 此时,似乎正在我的命令提示符下运行。 然后,我尝试获取在osx上运行docke

  • 我在连接mongo shell时遇到问题。当我从iptable中删除所有指令时,我可以成功连接。CentOS 6.5,mongod正在运行。这是我得到的错误: 我也试着从蒙哥开始。 Mongod正在运行: mongo日志也没有给出任何指向: 我的 IPTables 如下所示: 如果我将输入指令设置为ACCEPT,mongo shell会工作: Netstat -pln | rep 27017: 我

  • 问题内容: 我正在使用最新的spring-data- mongodb(1.1.0.M2)和最新的Mongo驱动程序(2.9.0-RC1)。我遇到这样的情况,我有多个客户端连接到我的应用程序,并且我想在同一台Mongo服务器中为每个客户端提供自己的“模式/数据库”。如果我直接使用驱动程序,这并不是一件很难的事情: 看,容易。但是spring-data- mongodb不允许使用简单的方法来使用多个数

  • 我有一个docker配置,在这里我启动了nginx服务器。现在我必须运行mongo和mongo express才能连接到我的数据库。当我在docker compose中输入这两个的配置时。yml并尝试docker组合,mongo服务启动,但mongo express显示此错误 非常感谢您的帮助,以下是我的配置。 docker编写。yml公司 Dockerfile文件 Dockerfile\u Ng

  • 我正在尝试使用MongoDB指南针使用Atlas

  • 要从Java连接到MongoDB,我使用: 它运行良好。现在我想连接到机器上的MongoDB,我必须通过SSH登录。我尝试使用JSch,这是我的代码: 一切看起来都很好,我可以连接,但有一个问题: 错误是: 我应该设置更多的东西来连接吗?当我检查输出是时,我如何从程序连接的Java检查。当我使用PuTTY时,一切正常。