[英]Threads: unable to open database file with sqlite3 inside docker
我正在使用由 gunicorn 運行的 Flask 應用程序,如果我直接在我的服務器上運行它可以正常工作,但如果我在 Docker 中運行它會失敗並出現錯誤
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib64/python3.8/threading.py", line 932, in _bootstrap_inner
self.run()
File "/usr/lib64/python3.8/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/opt/app-root/src/backend.py", line 242, in runAlertManager
db = get_db()
File "/opt/app-root/src/backend.py", line 29, in get_db
db = g._database = sqlite3.connect(DATABASE)
sqlite3.OperationalError: unable to open database file
如果我在 docker 容器中獲得一個 cli,我可以在該文件上使用 sqlite3 客戶端。 如果我刪除線程部分它也可以正常工作只是不確定為什么它可以直接工作但不能在 Docker
簡化我有這樣的東西
from threading import Thread
from time import sleep
from flask import g, Flask, request, jsonify, current_app
app = Flask(__name__)
def get_db():
db = getattr(g, '_database', None)
if db is None:
print(DATABASE)
db = g._database = sqlite3.connect(DATABASE)
return db
def runAlertManager(app):
'''
Runs AlertManager in a separate process
'''
with app:
db = get_db()
while True:
#do something
sleep(10)
x = Thread(target=runAlertManager, args=(app.app_context(), ))
x.start()
只是指向 /db/database.db 的路徑,該路徑已安裝到容器中並存在。
SQLite數據庫存在的整個目錄需要可寫; SQLite 需要創建一些 sidecar 文件(例如database.db
、 database.db-wal
或database.db-journal
)。
與其只掛載文件,不如掛載它所在的目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.