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

时间:2019-06-12 11:24:27

标签: python docker docker-compose webserver dockerfile

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

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

收集器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时,在我的计算机主机上可以实现第一个服务器,收集器,并且工作正常。第二台服务器计算器无法通过request.get连接到收集器。我尝试在docker-compose运行两个容器且ping无法正常运行时从计算器容器ping收集器,它说“在PATH中找不到可执行文件:未知”。似乎未建立两个容器的连接,尽管在检查my_network时会显示两个容器。谁能告诉我我在做什么错。我非常感谢...

1 个答案:

答案 0 :(得分:0)

改为使用 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 world中的端口。因此,如果公开容器的 A 端口8888,则所有其他容器都将能够在该端口访问该容器。但是您永远无法从主机上访问它。

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


还要更改dockerfile。您不需要硬编码的端口


编辑:

也摆脱这个

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),则只能以“代理”身份访问另一个终结点。 / p>