Docker 容器无法连接到远程 MongoDB

2023-12-22

我有一个flask基于 python 代码,只需连接到mongodb.有两条路线Get Post. Get简单地打印hello world并使用Post我们可以发布任何稍后保存的 json 数据MongoDB这段 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(<mongodbURL>)
        return client.get_database(<DBname>)

    except Exception as e:
        print(e)


def main():
    db = connect_db()
    collection = db.get_collection('<collectionName>')

    @app.route('/data', methods=['POST'])
    def data():
        j_data = request.get_json()
        x = collection.insert_one(j_data).inserted_id
        return "Data added successfully"

    @app.route('/')
    def hello_world():
        return "Hello World"

main()

if __name__ == '__main__':
   app.run()

您的容器可能没有互联网连接。从容器化 Java 应用程序连接到公共 Web 服务时,我遇到了类似的问题。

首先我会尝试重新启动docker:

systemctl restart docker

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

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

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

1)关于主机系统的注释dns=dnsmasq线路输入/etc/NetworkManager/NetworkManager.conf文件带有#并使用重新启动 NetworkManagersystemctl restart network-manager

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

{
    "dns": ["my.dns.server"]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 容器无法连接到远程 MongoDB 的相关文章

随机推荐

  • 如何修复针对 WASM 时“构建 OpenSSL 时出错”的问题?

    我正在使用 Rust 构建一个使用 openssl 板条箱的 Web 程序集项目 现在 当我想要构建应用程序时 问题出现了 它失败并显示以下输出 INFO Checking for the Wasm target INFO Compilin
  • 向 LinkedIn 发送 HEAD 请求时出现 999 错误代码

    我们在 PHP 应用程序中使用curl HEAD 请求来验证通用链接的有效性 我们检查状态代码只是为了确保用户输入的链接有效 除 LinkedIn 外 所有网站的链接均已成功 虽然它似乎可以在本地 Mac 上运行 但当我们尝试从任何 Ubu
  • 将列表写入列

    我有一个Python数据列表 1 2 3 4 5 我想通过以下方式将此数据作为列读入文件中 1 2 3 4 5 然后我想要我的下一个清单 6 7 8 9 10 要添加到其中 带有选项卡 1 6 2 7 3 8 4 9 5 10 等等 谁能帮
  • GruntFile 返回 [对象,对象]

    我正在使用粉底 jekyll样板文件 https github com daigofuji jekyll foundation 5 starter 每当我运行 grunt 时 它只会在 style css 中返回以下内容 object Ob
  • r 中的错误消息:没有要聚合的行[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在运行一个用 r 语言编写的程序 该程序旨在将许多 csv 数据文件编译成一个 csv 文件 然后生成一个输出文件 其中包含对组合文件中
  • 在 Google Cloud 中安装 Label Studio 并使其可通过公共 IP 使用

    我在 Google Cloud 中有一个使用 Ubuntu 20 04 LTS 的虚拟机实例 我将其设置为允许 HTTP 流量 我需要设置 Label Studio https github com heartexlabs label st
  • IE 8.渐变背景+图像

    如何让IE8显示渐变背景 图像 这在其他浏览器中是可行的 但在 IE 中不起作用 在其他浏览器中 Opera background image url gxt images my eye png o linear gradient top
  • Ionic 2 - 同时多个菜单(右 - 左)

    情况 我的 Ionic 2 应用程序中有一个可用的右侧菜单 我需要添加一个左侧菜单 我已经尝试过 但到目前为止还没有成功 这是我的尝试 THE CODE 使用此代码 右侧菜单可以正常工作 但左侧菜单不会出现 应用程序 html
  • Suave - 控制何时“缓存”或重新计算响应

    我想了解如何控制响应何时 缓存 以及何时 重新计算 举个例子
  • Spring Data JPA:嵌套实体的批量插入

    我有一个测试用例 需要将 100 000 个实体实例保存到数据库中 我当前使用的代码可以执行此操作 但最多需要 40 秒才能将所有数据保留在数据库中 数据是从大小约为 15 MB 的 JSON 文件中读取的 现在我已经在另一个项目的自定义存
  • FFMPEG -filter_complex 绘制文本,样式如粗体斜体和下划线

    我正在尝试在视频的填充区域添加文本 有 4 到 5 件事我无法做 1 绘制文本样式 粗体 斜体 下划线 2 填充区域不透明度 3 字幕垂直对齐 当我给 VAlign 一些值时 有时会跑出窗外 如何正确计算 距离顶部 50 像素 或者距离底部
  • 如何通过我的 Web 服务运行 .exe 文件?

    复制 是否可以从 Web 服务运行可执行文件 https stackoverflow com questions 717657 is it possible to run an executable from a web service H
  • Android:ActionBar 在显示和隐藏时出现故障

    我想在单击时显示 隐藏操作栏 它确实显示和隐藏 但它并不平滑 底部隐藏但在消失之前有一段时间不同的背景 我什至在一个简单的 hello world 应用程序中尝试过 结果是相同的 这是代码 public void onCreate Bund
  • os.close(0) 和 sys.stdin.close() 之间的区别

    我正在编写一些 Python 代码 它是从 Apache 调用的 CGI 脚本 代码所做的第一件事是 我相信 尝试使用以下命令关闭 stdin stdout stderr for fd in 0 1 2 try os close fd ex
  • Websphere 由于 c3p0 挂起

    我正在使用 WAS 7 1 以及 c3p0 v 0 9 2 1 和 hibernate 3 2 6ga 使用几个小时后 Websphere 挂起 我在日志中看到此消息 6 24 13 10 57 50 377 CEST 00000031 T
  • React JS - 使用后退按钮获取以前的搜索

    因此 我编写了一个小型单页应用程序 它查询 API 并返回一堆结果 我将这些结果显示给用户在输入搜索词的输入字段下方 每次我输入新的搜索词并按 Enter 键时 都会重新查询 API 并使用新结果更新页面 但是 我希望能够单击浏览器中的后退
  • 无法向 FB 提交错误报告

    浏览 FB bug 后https developers facebook com bugs https developers facebook com bugs 并且没有找到我的问题的答案 我在 SO 上发布了一个问题 https stac
  • 如何在 C# 中检查数据库(ACCESS 或 SQL)中是否存在表

    我发现很多关于这个问题的问题 但是有没有什么简单的语句可以完成这个任务呢 对于 SQL 和 ACCESS IF EXISTS SELECT 1 FROM sys tables WHERE name table name BEGIN do s
  • 使用 SharedPreferences 保存多个 EditText 值

    我正在尝试构建一个应用程序 人们可以在其中填写个人数据 例如姓名 电话号码 电子邮件 对于上面提到的每个字段 我创建了一个EditText 现在我的目标是使用保存用户的输入SharedPreferences这样他 她就不必每次重新打开应用程
  • Docker 容器无法连接到远程 MongoDB

    我有一个flask基于 python 代码 只需连接到mongodb 有两条路线Get Post Get简单地打印hello world并使用Post我们可以发布任何稍后保存的 json 数据MongoDB这段 python 代码运行良好