在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时会显示两个容器。谁能告诉我我在做什么错。我非常感谢...
答案 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>