繁体   English   中英

Docker sqlite3.OperationalError:无法打开数据库文件

[英]Docker sqlite3.OperationalError: unable to open database file

我知道还有更多类似的问题,但没有一个能解决我遇到的问题。 我用 Flask 组装了一个非常基本的 Python 应用程序:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'HELLO WORLD!'

app.run(host='0.0.0.0', port=8000)

在更老的地方,我创建了一个错误的单元测试:

def calc(x, y):
    return x + y

def test_calc():
    assert 5 == calc(2, 3)

我真正想要创建的是一个 CI,它创建一个 docker 镜像,进行测试,然后将 docker 镜像发布到 Docker Hub 但运行这个命令来运行测试docker-compose run app sh -c "pytest test.py --cov -p no:cacheprovider"我收到错误:

test.py .                                                                                                                                                   [100%]
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/_pytest/main.py", line 240, in wrap_session
INTERNALERROR>     session.exitstatus = doit(config, session) or 0
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/_pytest/main.py", line 296, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pluggy/hooks.py", line 286, in __call__
INTERNALERROR>     return self._hookexec(self, self.get_hookimpls(), kwargs)
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pluggy/manager.py", line 93, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook, methods, kwargs)
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pluggy/manager.py", line 84, in <lambda>
INTERNALERROR>     self._inner_hookexec = lambda hook, methods, kwargs: hook.multicall(
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pluggy/callers.py", line 203, in _multicall
INTERNALERROR>     gen.send(outcome)
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pytest_cov/plugin.py", line 271, in pytest_runtestloop
INTERNALERROR>     self.cov_controller.finish()
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pytest_cov/engine.py", line 44, in ensure_topdir_wrapper
INTERNALERROR>     return meth(self, *args, **kwargs)
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/pytest_cov/engine.py", line 229, in finish
INTERNALERROR>     self.cov.stop()
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/control.py", line 658, in save
INTERNALERROR>     data = self.get_data()
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/control.py", line 716, in get_data
INTERNALERROR>     if self._collector and self._collector.flush_data():
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/collector.py", line 442, in flush_data
INTERNALERROR>     self.covdata.add_lines(self.mapped_file_dict(self.data))
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 437, in add_lines
INTERNALERROR>     self._choose_lines_or_arcs(lines=True)
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 494, in _choose_lines_or_arcs
INTERNALERROR>     with self._connect() as con:
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 299, in _connect
INTERNALERROR>     self._create_db()
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 248, in _create_db
INTERNALERROR>     with db:
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 1026, in __enter__
INTERNALERROR>     self._connect()
INTERNALERROR>   File "/usr/local/lib/python3.8/site-packages/coverage/sqldata.py", line 1008, in _connect
INTERNALERROR>     self.con = sqlite3.connect(filename, check_same_thread=False)
INTERNALERROR> sqlite3.OperationalError: unable to open database file

我遇到过同样的问题。 来自容器的用户无法在工作目录中创建文件。 因此,以 root 身份执行可以解决问题。 您还可以更改工作目录或向用户添加权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM