Mongodb 在docker中运行mongo DB命令时连接被拒绝
我是docker和mongoDB的新手,所以我想我错过了一些步骤。以下是我目前在Dockerfile中的内容: 来自python:2.7的Mongodb 在docker中运行mongo DB命令时连接被拒绝,mongodb,docker,dockerfile,docker-machine,Mongodb,Docker,Dockerfile,Docker Machine,我是docker和mongoDB的新手,所以我想我错过了一些步骤。以下是我目前在Dockerfile中的内容: 来自python:2.7的 运行apt获取更新\ &&apt get安装-y mongodb\ &&rm-rf/var/lib/apt/lists/* 运行mkdir-p/data/db 运行服务mongodb启动 运行mongod--fork--logpath/var/log/mongodb.log 运行mongo db--eval'db.createUser({user:“dbus
运行apt获取更新\
&&apt get安装-y mongodb\
&&rm-rf/var/lib/apt/lists/*
运行mkdir-p/data/db
运行服务mongodb启动
运行mongod--fork--logpath/var/log/mongodb.log
运行mongo db--eval'db.createUser({user:“dbuser”,pwd:“dbpass”,角色:[“readWrite”,“dbAdmin”]})
在最后一个命令中连接失败:
错误:无法连接到src/mongo/shell/mongo.js:145上的服务器127.0.0.1:27017
异常:连接失败“”
如何才能成功连接?我是否应该更改主机/IP,以及更改为什么,在哪些命令中?这里出现了一些问题。首先是您正在运行的命令:
RUN service mongodb start
RUN mongod --fork --logpath /var/log/mongodb.log
每一个都将运行以在docker中创建一个层。一旦运行的命令返回,启动的临时容器将停止,容器中更改的任何文件都将被捕获以创建新层。在这些命令之间没有持久的进程
这些命令还运行后台版本的启动命令。在docker中,您会发现这是一个问题,因为当您使用它作为容器的命令时,您会发现命令一完成,容器就死了。容器上的Pid 1与linux操作系统上的Pid 1具有相同的角色,一旦它消失,其他一切都会消失
我看到的第二个问题是将数据与容器混合在一起,即使用last 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"]})'
我想你误解了Dockerfiles的用途。 正如所指出的,一个 Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装图像的所有命令 映像的整个概念是从映像中派生运行的容器,然后用数据填充并查询(对于数据库)或由外部容器/主机(对于web服务)或许多其他可能的用法调用 要回答您的问题,我假定:
docker run——命名我的mongo-d mongo
注意:不需要编写自定义图像。使用图像Dockerfile
FROM python:3-alpine
ADD my_script.py /
RUN pip install any-dependency-you-might-need
CMD [ "python", "./my_script.py" ]
b) 编写您的my_script.py
client=MongoClient('mongodb://mongo:27017/)
开始
docker build -t my-pyhthon-magic .
b) 运行它:
注意:此处的--link
链接了一个名为my mongo的正在运行的容器,该容器将在my python magic
-容器中作为mongo
进行内部访问。这就是为什么您可以在python脚本中使用它我希望这对你有所帮助——如果我误解了你的意思,请毫不犹豫地提问或修改你的问题 不要试图重新发明轮子。Mongo docker container在这里大家好,我是docker的新手,潜伏在论坛中解决我在容器链接和端口映射方面的问题。我上周读到--link不推荐使用/可能会过时。我听说过这种方法,另一种适用于docker新版本的方法是什么?资料来源:你完全正确。最好的方法是在版本2中使用
docker compose
。请查看此处的文档:。为了简化,我跳过了这里。
docker run -d --name python-magic-container --link my-mongo:mongo my-python-magic