docker Mongo图像未使用凭据创建

wkyowqbh  于 2023-02-07  发布在  Docker
关注(0)|答案(1)|浏览(98)

我正在使用docker-compose在我的机器上创建mongo:latest容器。
这是我的docker-compose。

version: '3.6'

services:
  backend:
    image: backend:1.0.0
    container_name: backend
    ports:
      - '5000:5000'
    links:
      - mongodb
    environment:
      NODE_ENV: PRODUCTION
      API_PORT: 5000
      MONGO_USERNAME: root
      MONGO_PASSWORD: rootPassXXX
      MONGO_HOST: mongodb
      MONGO_PORT: 27017
      MONGO_DATABASE: automatic
      JWT_TOKEN: Auto
  scheduler:
    image: scheduler:1.0.0
    container_name: scheduler
    links:
      - mongodb
    environment:
      NODE_ENV: PRODUCTION
      API_PORT: 5000
      MONGO_USERNAME: root
      MONGO_PASSWORD: rootPassXXX
      MONGO_HOST: mongodb
      MONGO_PORT: 27017
      MONGO_DATABASE: automatic
  mongodb:
    image: mongo
    container_name: mongodb
    expose:
      - 27017
    ports:
      - '27017:27017'
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=rootPassXXX
    volumes:
      - ./conf/mongodb:/data/db

volumes:
  autoc:
    external: true
    
networks: 
  default: 
    external: 
      name: automatic

创建这些容器后,我收到来自它们的错误:MongoServerError: Authentication failed.
这是应用程序尝试连接的URI:mongodb://root:rootPassXXX@mongodb:27017/matiautomai.
在尝试调查发生了什么的时候,我尝试登录到同一个mongo容器,该容器使用用户名和密码变量初始化,而不使用凭据:mongodb://mongodb:27017/automatic,应用程序设法连接到它。
我已经检查了Docker中心内的文档,似乎我以正确的方式使用了环境变量。
我错过了什么?

xhv8bpkk

xhv8bpkk1#

看到你的有益评论后,我找到了这个问题的解决方案。
我需要初始化一个一次性码头组成与初始脚本,位于里面。
docker-compose.yaml

version: '3.7'

services:
  mongodb:
    container_name: mongodb
    image: mongo:latest
    restart: always
    ports:
      - 27017:27017

    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: password
      MONGO_INITDB_DATABASE: root-db

    volumes:
      - ./docker-entrypoint-initdb.d/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro

这是位于./docker-entrypoint-initdb.d/mongo-init.js中的脚本:

print('start ~~~~');

db = db.getSiblingDB('yourDBname');
db.createUser(
  {
    user: 'username',
    pwd: 'password',
    roles: [{ role: 'readWrite', db: 'yourDBname' }],
  },
);
db.createCollection('users');

print('end ~~~~');

之后,您将能够使用在.js文件中设置的凭据连接到mongo。

相关问题