Невозможно подключить несколько python socket.io внутри докера - PullRequest
0 голосов
/ 03 февраля 2019

Я создал docker-compose из простого контейнера python3.6, открывающего порт 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 голосов
/ 03 февраля 2019

Оказывается, что журналы докера задерживаются до остановки программы 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"

Так что теперь я вижу печать, подтверждающую соединение ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...