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

问题描述 投票:1回答:1

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

Dockerfile:

FROM python:3.6-alpine

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

多克尔 - 撰写:

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

serve u让.朋友:

#!/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运行这个脚本,那么serveur.py就能完美运行。

谢谢你们的时间。

python sockets docker
1个回答
0
投票

事实证明,docker日志被延迟,直到python程序停止。所以我从来没有看过印刷品,因为这个程序,永远不会停止。解决方案是将此env变量放在docker-compose文件中:

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

所以现在我可以看到确认连接的打印件..

© www.soinside.com 2019 - 2024. All rights reserved.