我正在尝试运行网络服务器来检查系统在负载下的行为。
在寻找替代方案时,我想尝试一下 Python 的网络服务器:
如果我运行以下命令,它会按预期工作:
$ sh -c 'ulimit; date>date.txt ; python3 -m http.server' &
unlimited
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
$ curl localhost:8000/date.txt
Wed May 8 10:11:00 UTC 2024
如果我尝试在 docker 容器中运行它,它无法分叉:
$ docker run --detach --name pyhttp -p 8000:8000 python:3 sh -c 'ulimit ; date>date.txt python3 -m http.server'
$ curl localhost:8000/date.txt
curl: (52) Empty reply from server
$ docker logs pyhttp
unlimited
----------------------------------------
Exception occurred during processing of request from ('172.18.0.1', 23904)
Traceback (most recent call last):
File "/usr/local/lib/python3.12/socketserver.py", line 318, in _handle_request_noblock
self.process_request(request, client_address)
File "/usr/local/lib/python3.12/socketserver.py", line 706, in process_request
t.start()
File "/usr/local/lib/python3.12/threading.py", line 992, in start
_start_new_thread(self._bootstrap, ())
RuntimeError: can't start new thread
----------------------------------------
我想检查一下版本:
$ python3 --version
Python 3.6.8
$ docker run python:3 python3 --version
Python 3.12.3
使用 python:3.6.8 运行 docker 命令有效。
这似乎在 3.7 之前的某个时间就出问题了 - 我已经报告了一个问题。