我对这个过程有点模糊..。
我有一个ufw设置,只允许443,80..which直接进入webserver (nginx容器)。
处理我网站上的任何请求。
通过查看数字海洋ip地址+ postgres容器端口,我还拥有一个连接到postgres容器的connects容器。
它在液滴内部,所以它可以与共享相同ip的其他容器通信?在任何case..it作品中。尽管我不明白为什么,因为它不是在nginx中配置的.
但是,当我试图从快速容器中请求一些东西时,确切的过程是什么呢?
如果我试图从我的容器app..using中获取一些json,则液滴ip +快速端口号会导致它超时。
是否有一种方法可以以与postgres容器相同的方式连接到postgres容器?
谢谢
发布于 2021-09-08 23:19:57
一点理论:
你有一个水滴,它有自己的端口,它们可以在互联网上关闭或打开。水滴是一堆码头客。每个码头容器都有自己的端口,为主机关闭,默认情况下关闭另一个容器,您应该使用network或expose打开它们(我将对其进行描述)。
还不清楚您的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
<hostPort>从上方的点。
运行上面的所有容器
小安全提示:我不建议您打开DB的端口到Internet,如果您不了解您所做的,因为它是不安全的,并可能导致安全问题在未来。
更广泛的答案是链接到码头文档:
那么,如果您有这样的工具:
由于安全原因,带有droplet
连接到服务器。
我们为什么要创建网络?当您运行码头集装箱时,它们中的每一个都是孤立的,其所有端口都是隐藏的。因此,您可以添加选项--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。
--expose选项(https://docs.docker.com/engine/reference/commandline/run/#publish-or-expose-port--p---expose)在容器中公开此端口。仅仅在端口中添加--expose选项是不应该的。它只是打开容器内的端口,但是主机(液滴)没有连接到它。您应该使用--publish选项将主机的某些端口映射到容器的公开端口(请参阅上面的最后链接)。
。
https://stackoverflow.com/questions/69108125
复制相似问题