gpt4 book ai didi

mongodb - 在 docker 中运行 mongo DB 命令时连接被拒绝

转载 作者:可可西里 更新时间:2023-11-01 09:58:46 32 4
gpt4 key购买 nike

我是 docker 和 mongoDB 的新手,所以我想我遗漏了一些步骤。到目前为止,这是我的 Dockerfile 中的内容:

FROM python:2.7

RUN apt-get update \
&& apt-get install -y mongodb \
&& rm -rf /var/lib/apt/lists/*

RUN mkdir -p /data/db

RUN service mongodb start

RUN mongod --fork --logpath /var/log/mongodb.log

RUN mongo db --eval 'db.createUser({user:"dbuser",pwd:"dbpass",roles:["readWrite","dbAdmin"]})'

最后一条命令连接失败:

Error: couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145 exception: connect failed`.

如何连接成功?我应该在哪些命令中更改主机/IP 以及更改什么?

最佳答案

这里有几处错误。首先是您正在运行的命令:

RUN service mongodb start

RUN mongod --fork --logpath /var/log/mongodb.log

其中每一个都将运行以在 docker 中创建一个层。一旦正在运行的命令返回,启动的临时容器就会停止,容器中更改的任何文件都会被捕获以创建一个新层。在这些命令之间没有持续的持久进程。

这些命令也是运行启动命令的后台版本。在 docker 中,你会发现这是有问题的,因为当你将它用作容器的命令时,你会发现命令一完成容器就死了。容器上的 Pid 1 与 Linux 操作系统上的 pid 1 具有相同的作用,一旦它死了,其他所有东西也死了。

我看到的第二个问题是以使用最后一个 RUN 命令初始化数据库的形式将数据与容器混合。这失败了,因为没有数据库在运行(见上文)。我建议改为创建一个配置数据库的入口点(如果数据库尚不存在),然后在 docker-compose.yml 或 docker run 命令行中使用卷在容器之间保存数据.

如果您绝对必须将数据初始化为图像的一部分,那么您可以尝试将各种命令合并到一个运行中:

RUN mongod --fork --logpath /var/log/mongodb.log \
&& mongo db --eval 'db.createUser({user:"dbuser",pwd:"dbpass",roles:["readWrite","dbAdmin"]})'

关于mongodb - 在 docker 中运行 mongo DB 命令时连接被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41750758/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com