UDP-сервер Python, работающий в контейнере Docker - PullRequest
0 голосов
/ 11 марта 2019

Я бы хотел протестировать простой UDP-сервер в Docker, прежде чем продолжить разработку. Я никогда раньше не работал с Docker, поэтому я предполагаю, что это должна быть ошибка новичка

Что у меня сейчас?

Сервер

import threading
import socketserver



class ThreadedUDPRequestHandler(socketserver.BaseRequestHandler):

    def handle(self):
        data = self.request[0].strip()
        current_thread = threading.current_thread()
        print("Thread: {} client: {}, wrote: {}".format(current_thread.name, self.client_address, data))
        Split = threading.Thread(target=ParseIncomingData,args=(data,))
        Split.start()



class ThreadedUDPServer(socketserver.ThreadingMixIn, socketserver.UDPServer):
    pass

def publish_messages(data):
    """Publishes multiple messages to a Pub/Sub topic."""
    print('Published {} .'.format(data))

def ParseIncomingData(message):
    sender = threading.Thread(target=publish_messages, args=(message,))
    sender.start()


if __name__ == "__main__":
    HOST, PORT = "0.0.0.0", 6071
    try:
        serverUDP = ThreadedUDPServer((HOST, PORT), ThreadedUDPRequestHandler)
        server_thread_UDP = threading.Thread(target=serverUDP.serve_forever)
        server_thread_UDP.daemon = True
        server_thread_UDP.start()
        serverUDP.serve_forever()
    except (KeyboardInterrupt, SystemExit):
        serverUDP.shutdown()
        serverUDP.server_close()
        exit()

Dockerfile

# Use an official Python runtime as a base image
FROM python:3.7.2-slim

# Set the working directory to /app
WORKDIR /app

# Copy the current directory contents into the container at /app
ADD . /app

# Make port 6071 available outside this container
EXPOSE 6071/udp

# Run app.py when the container launches
CMD ["python", "app.py"]

Как мне выполнить контейнер?

docker run --rm -p 6071:6071/udp listener

Я пробовал с несколькими комбинациями использовать порт, но ничего не вижу при запуске (Windows)

EXTRA:

Для проверки сервера я использую геркулес для отправки данных USP:

hercules

1 Ответ

0 голосов
/ 11 марта 2019

Работает с этой конфигурацией:

Использование небуферизованного вывода в dockerfile с

CMD ["python","-u","main.py"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...