在两个 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'
通过 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'