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

时间:2019-02-03 01:46:24

标签: python sockets docker

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

Dockerfile:

FROM python:3.6-alpine

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

Docker-compose:

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

serveur.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之外运行此脚本,那么serveur.py可以完美运行。

谢谢你们的时间。

1 个答案:

答案 0 :(得分: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"

所以现在我可以看到确认连接的打印纸。