3

在尝试运行由 docker-secrets 管理的授权(带有文件)的 MongoDB docker 实例时,受此博客文章的启发,我一直遇到以下错误:

2020-07-24T16:25:26.656+0000 E  QUERY    [js] uncaught exception: Error: couldn't add user: Error preflighting normalization: U_STRINGPREP_PROHIBITED_ERROR :

设置

  • 使用 WSL2 后端运行 docker 的 Windows 机器。
  • 来自 docker hub 的最新 mongo映像(版本 4.2.8)
  • 用于管理 MongoDB 数据库的身份验证凭据的 docker secrets
  • 我的作曲家文件:
# docker-compose.yml

version: '3.5'
services:
  my_db:
    image: mongo
    command: --auth
    environment:
      MONGO_INITDB_ROOT_PASSWORD_FILE: /run/secrets/mongodb_root_password
      MONGO_INITDB_ROOT_USERNAME_FILE: /run/secrets/mongodb_root_username
    secrets:
      - mongodb_root_password
      - mongodb_root_username
secrets:
  mongodb_root_password:
    - file: mongodb/.mongodb_root_password
  mongodb_root_username:
    - file: mongodb/.mongodb_root_username
  • 部署 docker stack 的 shell 命令
$ docker stack deploy --compose-file=docker-compose.yml my_db_stack

问题

不幸的是,容器不断死亡。在日志中,我能够找到上面提到的错误。

4

1 回答 1

3

事实证明,问题是由and文件中的Windows 样式的行结尾引起的。这些文件是在 Windows 主机上创建的,然后(我假设)被盲目地复制到容器中。mongodb/.mongodb_root_passwordmongodb/.mongodb_root_username

解决方案

使用记事本++,我将行尾切换为 Unix 样式,从而解决了问题。

要切换行尾,我在 Notepad++ 上右键单击下图中底部栏的突出显示部分。 记事本突出显示行尾

于 2020-07-24T17:18:16.633 回答