为什么 python httpd 无法在 python docker 容器内启动线程?

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

我正在尝试运行网络服务器来检查系统在负载下的行为。

在寻找替代方案时,我想尝试一下 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
----------------------------------------
python multithreading docker apache
1个回答
0
投票

我想检查一下版本:

$ python3 --version
Python 3.6.8
$ docker run python:3 python3 --version
Python 3.12.3

使用 python:3.6.8 运行 docker 命令有效。

这似乎在 3.7 之前的某个时间就出问题了 - 我已经报告了一个问题。

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