gpt4 book ai didi

python - Docker 撰写 : Allowing Network Interactions Between Services

转载 作者:行者123 更新时间:2023-12-01 02:06:03 26 4
gpt4 key购买 nike

我想要两个 Docker containers ,它们在相同的 docker-compose.yaml 中定义。文件能够共享 network并与彼此暴露的端口进行交互。我在 Mac 版 Docker 上运行所有这些。

为了做到这一点,我设置了几个运行小型 Flask 的 docker 容器。服务器可以返回“Hello”或向另一个服务器发出请求(详细信息请参见下文)。到目前为止,我无法允许这两个应用程序相互通信。

到目前为止我已经尝试过:

  • expose ing相关端口
  • publish获取端口并将其与主机 1:1 映射
  • 对于flask同时使用 localhost0.0.0.0作为 --host arg
  • curl从一个容器到另一个容器(同时使用 localhost:<other_container_port>0.0.0.0:<other_container_port>
  • 使用隐式network根据文档
  • 明确 network定义

以上所有示例都给我一个 Connection Refused错误,所以我觉得我错过了一些关于 Docker 网络的基本知识。

Networking in Compose文档提到以下内容:

When you run docker-compose up, the following happens:

...

  1. A container is created using db’s configuration. It joins the network myapp_default under the name db.

他们的示例似乎让所有单独的服务都能够在没有任何网络定义的情况下进行通信,这让我相信我可能也不需要定义网络。

下面是我的 docker-compose.yaml 文件 - 所有文件都可以在 this gist 找到:

version: '3'
services:
receiver:
build: ./app
# Tried with/without expose
expose:
- 3000
# Tried with/without ports
ports:
- 3000:3000
# Tried with/without 0.0.0.0
command: "--host 0.0.0.0 --port 3000"
# Tried with/without explicit network
networks:
- mine
requester:
build: ./app
expose:
- 4000
ports:
- 4000:4000
# This one's ip is 0.0.0.0, so we can access from host
command: "--host 0.0.0.0 --port 4000"
networks:
- mine
networks:
mine: {}

app.py 文件:

@app.route("/")
def hello():
return "Hello from {}".format(request.host)

@app.route("/request/<int:port>")
def doPing(port):
location = "http://localhost:{}/".format(port)
return requests.get(location, timeout=5).content

最佳答案

在 docker-compose 中,同一网络上的服务可以通过名称相互访问,您甚至不必向主机公开端口。所以你的 docker-compose.yaml 可以简化为:

version: '3'
services:
receiver:
build: ./app
command: "--host 0.0.0.0 --port 3000"
requester:
build: ./app
command: "--host 0.0.0.0 --port 4000"

在容器请求者内部,您可以使用

访问另一个容器
ping receiver

解析名称,您可以验证端口是否也打开,例如使用 netcat

nc -z receiver 3000 -v

关于python - Docker 撰写 : Allowing Network Interactions Between Services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49059877/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com