gpt4 book ai didi

python - 无法在docker内连接多个python socket.io

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:32 25 4
gpt4 key购买 nike

我构建了一个简单的 python3.6 容器的 docker-compose,暴露端口 5000。该容器运行一个 python 服务器端脚本,等待客户端连接。以下是文件:

Dockerfile:

FROM python:3.6-alpine

WORKDIR /app
CMD ["python","serveur.py"]

Docker 组合:

version: '2'
services:
serveur:
build:
context: .
dockerfile: Serveur
ports:
- "127.0.0.1:5000:5000"
volumes:
- "./app:/app"

server.py:

#!/usr/bin/python3 
import socket
import threading

print("debut du programme")
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = "0.0.0.0"
port = 5000
socket.bind((host, port))
socket.listen(5)

for i in range(2):
print("ready to connect")
a,b = socket.accept()
print("Client connected")

socket.close()

问题是这样的:

-如果我运行 docker compose,我的客户端将无法连接到服务器;代码似乎阻塞了。此外,Docker 日志中没有显示任何打印内容。如果我将 socket.accept() 从循环中取出,一个客户端就可以连接,并且我会在日志中看到所有打印内容。如果我从代码中取出循环,然后对齐多个 socket.accept(),那么,代码块。

我知道问题出在我的 Docker 设置上,因为如果我从 Docker 中运行这个脚本,server.py 就可以完美运行。

谢谢大家抽出时间。

最佳答案

事实证明,docker日志被延迟,直到python程序停止。所以我从未见过打印品,因为该程序永远不会停止。解决办法是将此环境变量放入 docker-compose 文件中:

version: '2'
services:
serveur:
build:
context: .
dockerfile: Serveur
environment:
- "PYTHONUNBUFFERED=1"
ports:
- "127.0.0.1:5000:5000"
volumes:
- "./app:/app"

现在我可以看到确认连接的打印内容..

关于python - 无法在docker内连接多个python socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54499236/

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