首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与容器化api通信?

如何与容器化api通信?
EN

Stack Overflow用户
提问于 2021-09-08 18:37:25
回答 1查看 60关注 0票数 0

我对这个过程有点模糊..。

我有一个ufw设置,只允许443,80..which直接进入webserver (nginx容器)。

处理我网站上的任何请求。

通过查看数字海洋ip地址+ postgres容器端口,我还拥有一个连接到postgres容器的connects容器。

它在液滴内部,所以它可以与共享相同ip的其他容器通信?在任何case..it作品中。尽管我不明白为什么,因为它不是在nginx中配置的.

但是,当我试图从快速容器中请求一些东西时,确切的过程是什么呢?

如果我试图从我的容器app..using中获取一些json,则液滴ip +快速端口号会导致它超时。

是否有一种方法可以以与postgres容器相同的方式连接到postgres容器?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-08 23:19:57

一点理论:

你有一个水滴,它有自己的端口,它们可以在互联网上关闭或打开。水滴是一堆码头客。每个码头容器都有自己的端口,为主机关闭,默认情况下关闭另一个容器,您应该使用networkexpose打开它们(我将对其进行描述)。

还不清楚您的fastApi容器和postgres容器是否在相同的液滴上,所以我描述了常见的情况。

以下文字的小字体:

  • 以配置容器相互通信,使用对接网络。

您可以使用:docker run --network <networkName> --network-alias <aliasName> <imageName>运行DB

API容器:docker run --network <networkName> <imageName>

然后,应用程序可以使用<protocol>://<aliasName>:<dbPort>.连接到DB。

为了允许您的主机连接到您的码头容器,您应该公开某个容器的端口并将其映射到某个主机的端口:docker run --expose <exposedPort> --publish <hostPort>:<exposedPort> <imageName>

  • 您可以在构建映像时公开端口,因此不需要在运行命令

中使用--expose

  • 打开您的端口到internet,您的小滴应该保持端口打开,或者您可以使用nginx和代理打开端口到您的<hostPort>

上方的点。

  • I使用简单的对接命令作为基本描述,但是您可以使用docker组合

运行上面的所有容器

小安全提示:我不建议您打开DB的端口到Internet,如果您不了解您所做的,因为它是不安全的,并可能导致安全问题在未来。

更广泛的答案是链接到码头文档:

那么,如果您有这样的工具:

由于安全原因,带有droplet

  • fastApi的数字海洋app

  • container容器和带有DB

  1. You的
    • 应关闭液滴上的所有端口,但80和443端口除外。只打开您需要公开的端口是很好的做法。80和443端口允许用户使用HTTP/HTTPS.

连接到服务器。

  1. Docker允许容器使用网络桥相互通信。您可以在这里阅读更多详细信息:https://docs.docker.com/engine/reference/commandline/network_create/

我们为什么要创建网络?当您运行码头集装箱时,它们中的每一个都是孤立的,其所有端口都是隐藏的。因此,您可以添加选项--network <networkName> for run命令(https://docs.docker.com/engine/reference/commandline/run/#connect-a-container-to-a-network---network)。所有连接到同一个network-name的容器都可以相互“通信”。此外,还可以使用--network-alias <aliasName>选项更改容器的名称。

例如:我最近运行了mongodb,因此默认情况下,mongodb在容器内部的端口27017上运行。我设置别名mongo并将其连接到某个网络。因此,当我使用同一个网络运行我的容器时,我应该用url mongodb://mongo:27017.连接到DB。

  1. 好吧,您将FastApi容器连接到DB容器,并可以向DB发出请求。但是你想在主机外看到你的fastApi应用程序(水滴)。那么,你应该打开港口。假设您在8080端口上运行fastApi应用程序。您应该使用--expose选项(https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose)在容器中公开此端口。

仅仅在端口中添加--expose选项是不应该的。它只是打开容器内的端口,但是主机(液滴)没有连接到它。您应该使用--publish选项将主机的某些端口映射到容器的公开端口(请参阅上面的最后链接)。

  1. 在开始时关闭了除80和443以外的所有端口。您可以使用Nginx代理关闭端口的所有请求。例如,您可以将来自http://ip:80/api的所有请求代理到本地主机:8080以使其工作。

  1. 可选。如果您的液滴中只有db容器,并且希望连接到液滴和DB。您可以公开DB的端口并将其映射到某个液滴的端口。然后,你可以打开液滴的端口并连接到它,但我不想让它变得不安全。您还可以通过SSL从API连接到您的数据库(我认为您至少应该为此设置SSH )。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69108125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档