python-3.x – Docker容器无法连接到远程MongoDB

前端之家收集整理的这篇文章主要介绍了python-3.x – Docker容器无法连接到远程MongoDB前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个基于烧瓶的python代码,只需连接到mongodb.It有两条路线Get Post.得到简单的打印hello world并使用Post我们可以发布任何稍后保存在MongoDB中的json数据这个python代码工作正常. MongoDB托管在云上.

我现在创建了一个Dockerfile:

FROM tiangolo/uwsgi-Nginx-flask:python3.6-alpine3.7

RUN pip3 install pymongo

ENV LISTEN_PORT=8000
EXPOSE 8000

COPY /app /app

使用命令运行

docker run –rm -it -p 8000:8000 myflaskimage

启动此docker镜像的容器后,我收到了GET的响应但没有来自POST的响应.我正在使用Postman软件发布json数据.我得到以下错误

pymongo.errors.ServerSelectionTimeoutError: No servers found yet

我有点困惑为什么python代码工作正常,但当我把它放在docker和启动容器时,它会抛出错误.我们是否必须在Dockerfile中包含任何内容才能启用与MongoDB的连接.

请帮忙.谢谢

Python代码

from flask import Flask,request
from pymongo import MongoClient

app = Flask(__name__)

def connect_db():
    try:
        client = MongoClient(
您可能没有来自容器的互联网连接.从容器化的Java应用程序连接到公共Web服务时,我遇到了类似的问题.

起初我会尝试重启docker:

systemctl restart docker

如果它没有帮助,那么请查看容器中的resolv.conf:

docker run --rm myflaskimage cat /etc/resolv.conf

如果它显示nameserver 127.x.x.x,那么你可以尝试:

1)在主机系统上使用#重启/etc/NetworkManager/NetworkManager.conf文件中的dns = dnsmasq行,并使用systemctl restart network-manager重新启动NetworkManager

2)或显式设置docker的DNS,将其添加到/etc/docker/daemon.json文件并重新启动docker:

{
    "dns": ["my.dns.server"]
}

猜你在找的Docker相关文章