- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 Sails 0.12.3 和 mongo 3.2.7
这是我的 config/connections.js。
mongo: {
adapter: 'sails-mongo',
host: 'database',
port: 27017,
user: 'user', //optional
password: 'password', //optional
database: 'db' //optional
}
和我的 docker-compose.yml
version: '2'
services:
myservice:
//blabla
links:
- database
database:
image: 'mongo:latest'
container_name: 'database'
environment:
MONGODB_PASSWORD: "password"
MONGODB_USER: "user"
MONGODB_DATABASE: "db"
每当我使用 docker-compose up --build 构建容器时都会出现问题,错误来自 sails-mongo
模块。
error: A hook (`orm`) failed to load!
error: Error: Failed to connect to MongoDB. Are you sure your configured Mongo instance is running?
Error details:
{ MongoError: Authentication failed.
at Function.MongoError.create (/app/node_modules/mongodb-core/lib/error.js:31:11)
at commandCallback (/app/node_modules/mongodb-core/lib/topologies/server.js:929:66)
at Callbacks.emit (/app/node_modules/mongodb-core/lib/topologies/server.js:116:3)
at .messageHandler (/app/node_modules/mongodb-core/lib/topologies/server.js:282:23)
at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:273:22)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:172:18)
at Socket.Readable.push (_stream_readable.js:130:10)
at TCP.onread (net.js:542:20)
name: 'MongoError',
message: 'Authentication failed.',
ok: 0,
code: 18,
errmsg: 'Authentication failed.' }
运行容器是否需要任何额外的配置?我知道 Mongo 不会创建数据库,除非有一些数据要存储,但我不确定这是否相关。
最佳答案
首先让我们解决您的问题:身份验证失败
。 sails-mongo 无法连接到 mongodb。这是为什么?我看到您为 mongodb docker 容器提供了一些环境变量:
environment:
MONGODB_PASSWORD: "password"
MONGODB_USER: "user"
MONGODB_DATABASE: "db"
然而,https://hub.docker.com/_/mongo/ 中并未对此进行记录. mongodb 容器忽略此值,因此未配置身份验证。 sails-mongo 将尝试进行身份验证,但是失败了,因为不存在这样的用户。您可以通过在 config/connections.js
中简单地注释掉用户和密码来对其进行测试。您的服务将能够连接。
在https://hub.docker.com/_/mongo/记录了如何启用身份验证:
docker run --name some-mongo -d mongo --auth
添加用户:
$ docker exec -it some-mongo mongo admin
connecting to: admin
> db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
Successfully added user: {
"user" : "jsmith",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
要自动执行此操作,您可以将用户创建放在 shell 脚本中并在 docker compose 中触发它。
您可以应用另一种解决方案。首先问问自己,为什么需要身份验证?你想从任何 ip 地址访问 mongodb 实例吗?然后你需要身份验证。如果不是,您可能会禁用身份验证。如果 mongodb 绑定(bind)到本地主机,则本地主机之外的任何人都无法连接到它。
使用 docker,您可以进一步强化这一点:禁止对 mongodb 实例的任何访问。只有与 mongodb 在同一网络上的容器才能连接。
使用 docker-compose 版本 2 网络功能:
version: "2"
services:
my-app:
image: myHubRepo/my-app:v1.X.Y
container_name: my-app
environment:
- MONGODB=mongodb:27017
- APP_PORT=80
- STAGE=production
expose:
- "80"
networks:
- back-tier
restart: always
mongodb:
image: mongo
volumes:
- mongodb-data:/data/db
networks:
- back-tier
restart: always
volumes:
mongodb-data:
driver: local
networks:
back-tier:
尽管来自同一网络 back-tier
上的容器,但无法从其自己的容器外部访问 Mongodb。
相应地调整env/production.js
:
module.exports = {
connections: {
prodMongoDb: {
adapter: 'sails-mongo',
url: 'mongodb://' + process.env.MONGODB + '/my_app'
}
},
models: {
connection: 'prodMongoDb'
},
port: process.env.APP_PORT || 8080,
log: {
level: "warn"
}
};
有关使用 compose 的网络的更多信息:https://docs.docker.com/compose/networking/
关于mongodb - 如何使用最少的配置在 mongo 容器中创建经过身份验证的 mongo 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39380617/
我正在使用SQL Server 2008 R2,并且想创建一个触发器。 对于每个添加(仅添加),将像这样更新一列: ABC-CurrentYear-AutoIncrementCode 例子: ABC-
是否可以在显示最终一致性的数据存储中创建/存储用户帐户? 似乎不可能在没有一堆架构复杂性的情况下管理帐户创建,以避免可能发生具有相同 UID(例如电子邮件地址)的两个帐户的情况? 最终一致性存储的用户
您好, 我有一个带有 Identity 的 .NetCore MVC APP并使用 this指导我能够创建自定义用户验证器。 public class UserDomainValidator : IU
这与以下问题相同:HiLo or identity? 我们以本站的数据库为例。 假设该站点具有以下表格: 帖子。 投票。 注释。 使用它的最佳策略是什么: 身份 - 这是更常见的。 或者 HiLo -
我想将 Blazor Server 与 ASP.NET Identity 一起使用。但我需要使用 PostgreSQL 作为用户/角色存储,因为它在 AWS 中。 它不使用 EF,这是我需要的。 我创
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我使用 ASP.NET 身份和 ClaimsIdentity 来验证我的用户。当用户通过身份验证时,属性 User.Identity 包含一个 ClaimsIdentity 实例。 但是,在登录请求期
所以我在两台机器上都安装了 CYGWIN。 如果我这样做,它会起作用: ssh -i desktop_rsa root@remoteserver 这需要我输入密码 ssh root@remoteser
我尝试在 mac osx 上的终端中通过 telnet 连接到 TOR 并请求新身份,但它不起作用,我总是收到此错误消息: Trying 127.0.0.1... telnet: connect to
我正在开发一个 .NET 应用程序,它可以使用 Graph API 代表用户发送电子邮件。 提示用户对应用程序进行授权;然后使用获取的访问 token 来调用 Graph API。刷新 token 用
我正在开发一项服务,客户可以在其中注册他们的 webhook URL,我将发送有关已注册 URL 的更新。为了安全起见,我想让客户端(接收方)识别是我(服务器)向他们发送请求。 Facebook和 G
在 Haskell 中,有没有办法测试两个 IORef 是否相同?我正在寻找这样的东西: IORef a -> IORef a -> IO Bool 例如,如果您想可视化由 IORef 组成的图形,这
我是 .NET、MVC 和身份框架的新手。我注意到身份框架允许通过注释保护单个 Controller 操作。 [Authorize] public ActionResult Edit(int? Id)
我有一列具有身份的列,其计数为19546542,我想在删除所有数据后将其重置。我需要类似ms sql中的'dbcc checkident'这样的内容,但在Oracle中 最佳答案 在Oracle 12
这是我用来创建 session 以发送电子邮件的代码: props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enabl
我想了解 [AllowAnonymous] 标签的工作原理。 我有以下方法 [HttpGet] public ActionResult Add() { return View(); } 当我没
在使用沙盒测试环境时,PayPal 身份 token 对某些人显示而不对其他人显示的原因是否有任何原因。 我在英国使用 API,终生无法生成或找到 token 。 我已经遵循协议(protocol)并
我对非常简单的事情有一些疑问:IDENTITY。我尝试在 phpMyAdmin 中创建表: CREATE TABLE IF NOT EXISTS typEventu ( typEventu
习语 #1 和 #5 是 FinnAPL Idiom Library两者具有相同的名称:“Progressive index of (without replacement)”: ((⍴X)⍴⍋⍋X⍳
当我第一次在 TFS 中设置时,我的公司拼错了我的用户名。此后他们将其更改为正确的拼写,但该更改显然未反射(reflect)在 TFS 中。当我尝试 checkin 更改时,出现此错误: 有没有一种方
我是一名优秀的程序员,十分优秀!