在两个 python 服务器之间通过 docker 共享数据

sharing data over docker compose between two python servers

通过 docker-compose

在两个 python 网络服务器(收集器和计算器)之间共享双打缓冲区

我正在尝试简单地将缓冲区或整数数组从称为收集器的 python 服务器发送到另一个称为计算器的服务器。计算器服务器应该执行简单的数学算法。这都是试炼。收集器和计算器 python 脚本 运行 内嵌在 docker 中 - 组成两个容器并设计为连接到同一网络。

收集器python脚本


app=Flask(__name__)

@app.route('/')
def index():
    d={"my_number": list(range(10))}
    return jsonify(d)

计算器python脚本

import requests

r=requests.get('https://collector:5000')

app = Flask(__name__)
@app.route('/')
def index():
    numbers_array = r.json()["my_numbers"]
    x=numbers_array[1] + numbers_array[2]
    return '{}'.format(x)

docker-compose.yml


services:
  collector:
    build: .
    env_file:
      - collector.env
    ports:
      - '5000:5000'
    volumes:
      - '.:/app'
    networks:
      - my_network



  calculator:
    build: ./calculator
    depends_on:
      - collector
    env_file:
      - calculator.env
    ports:
      - '5001:5000'
    volumes:
      - './calculator:/app'
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

两个图像的 Dockerfile 相同

FROM python:2.7-slim

RUN mkdir /app
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt

COPY . .

LABEL maintainer="Mahmoud KD"

VOLUME ["/app/public"]

CMD flask run --host=0.0.0.0 --port=5000

当我 运行 docker-compose up --build 时,第一个服务器、collector 可以在我的计算机主机上实现并且工作正常。第二台服务器计算器无法通过 request.get 连接到收集器。我试图从计算器容器中 ping 收集器,而 docker-compose 正在 运行 连接两个容器并且 ping 没有运行,它说“在 PATH 中找不到可执行文件:未知”。尽管在检查 my_network 时它显示了两个容器,但似乎没有建立两个容器的连接。任何人都可以告诉我我做错了什么。非常感谢...

改用expose

一个应用在端口 5000 其他端口 5001

docker-compose:

app1:

expose:
  - 5000

app2:

expose:
  - 5001  

确保你 运行 应用的 ip=0.0.0.0

如果您想从主机访问应用 2,转发端口

app2:

expose:
  - 5001
ports:
  - 80:5001

解释:

Expose 仅​​显示 docker 世界中的端口。因此,如果您公开容器的 A 端口 8888,所有其他容器将能够通过该端口访问该容器。但是您永远无法从主机访问它。

标准程序是您只转发一个端口,即 80 出于安全原因,其余流量无法从外部世界访问


同时更改 docker文件。您不需要硬编码端口


编辑:

也去掉这个

volumes:
  - '.:/app'

实际上可能会造成额外的麻烦


工作示例: - 它有效,但提供的应用程序包含错误

docker-compose.yml

version: '3.5'

services:
  collector:
    container_name: collector
    build:
      context: collector/.
    ports:
      - '80:5555'
    expose:
      - '5555'


  calculator:
    container_name: calculator
    build:
      context: calculator/.
    depends_on:
      - collector
    expose:
      - 6666
    ports:
      - '81:6666'
    volumes:
      - './calculator:/app'

您可以访问端口 80 和 81 上的两个端点。两个端点之间的通信对我们及其在 5555 和 6666 上是隐藏的。如果关闭 81(或 80),您只能访问另一个端点 'proxy'