【发布时间】:2021-06-08 06:31:14
【问题描述】:
我在 Kubernetes pod 的容器内运行两个线程,一个线程将一些数据推送到 db,另一个线程(flask 应用程序)显示来自数据库的数据。因此,只要 pod 启动,main.py(启动上述两个线程)就会被调用。
Docker 文件:
FROM python:3
WORKDIR /usr/src/app
COPY app/requirements.txt .
RUN pip install -r requirements.txt
COPY app .
CMD ["python3","./main.py"]
我有两个问题:
-
日志是查看运行脚本输出的唯一方法吗?当它在终端上运行时,我们不能连续看到它的输出吗?
-
另外,我无法通过进入容器来运行相同的 main.py 文件。它抛出以下错误:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/threading.py", line 954, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.9/threading.py", line 892, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.9/site-packages/flask/app.py", line 920, in run
run_simple(t.cast(str, host), port, self, **options)
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 1008, in run_simple
inner()
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 948, in inner
srv = make_server(
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 780, in make_server
return ThreadedWSGIServer(
File "/usr/local/lib/python3.9/site-packages/werkzeug/serving.py", line 686, in __init__
super().__init__(server_address, handler) # type: ignore
File "/usr/local/lib/python3.9/socketserver.py", line 452, in __init__
self.server_bind()
File "/usr/local/lib/python3.9/http/server.py", line 138, in server_bind
socketserver.TCPServer.server_bind(self)
File "/usr/local/lib/python3.9/socketserver.py", line 466, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use (edited)
如何停止与 pod 一起启动的 main.py 脚本并能够直接从容器本身运行 main.py?
谢谢。
【问题讨论】:
-
从
CMD停止main.py基本上会停止容器的主进程,因此会杀死容器和pod。也许您想不理会该进程,而是使用不同的端口运行另一个main.py实例?
标签: python-3.x docker flask kubernetes python-multithreading