docker Mongo连接url在Github Actions CI中失败,即使凭据正确

k2fxgqgv  于 2023-05-28  发布在  Docker
关注(0)|答案(1)|浏览(128)

在我的CI中,我需要确保我的代码可以与mongo一起工作,因此我使用官方的mongo docker镜像,并将我所需的凭据作为mongo镜像的环境变量传递。

build-on-mongo:
    runs-on: ${{ matrix.os }}
    env:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGO_INITDB_DATABASE: vote-stuysu-org
    services:
      mongo:
        image: mongo
        ports:
          # Maps tcp port 27017 on service container to the host
          - 27017:27017
    strategy:
      matrix:
        os: [ubuntu-20.04]
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: '14.x'
      - name: Install dependencies
        run: npm install

      - name: Test
        run: npm test
        env:
          MONGO_URL: mongodb://root:password@localhost:27017/vote-stuysu-org

但是,在测试步骤中,记录了一个错误:
(node:2158)UnhandledPromiseRejectionWarning:MongoError:身份验证失败。
我使用mongoose和nodejs,所以这是负责身份验证的代码:

mongoose.connect(process.env.MONGO_URL, {
    useUnifiedTopology: true,
    useNewUrlParser: true
});

我不认为我的连接URI是错误的,但我不知道为什么身份验证失败。

xghobddn

xghobddn1#

虽然有点晚了,但也许能帮上忙。对我来说,我在MongoDB连接url中包含了authSource=admin作为查询参数,它工作了,这里有一个例子:

mongodb://${MONGODB_USERNAME}:${MONGODB_PASSWORD}@localhost:${MONGODB_PORT}/${MONGODB_DB}?authMechanism=DEFAULT&authSource=admin;

我不需要在连接字符串中包含${MONGODB_DB}并为它创建一个env变量,只有当您想使用自定义数据库名称时才需要这样做。
我是通过使用MongoDB Compass了解到这一点的,MongoDB Compass是一个免费的原生GUI应用程序,可以让你连接到MongoDB数据库:https://www.mongodb.com/products/compass

相关问题