Python 在docker中使用Sqlite3和SqlAlchemy时发生磁盘I/O错误

Python 在docker中使用Sqlite3和SqlAlchemy时发生磁盘I/O错误,python,sqlite,sqlalchemy,docker,Python,Sqlite,Sqlalchemy,Docker,我有一个flask应用程序,它创建一个sqlite db来加载测试装置。在osx中运行pytest时,没有任何问题。然而,当我在Ubuntu14.04 docker容器中设置“PRAGMA journal_mode=WAL”时,我得到了以下结果: disk I/O error Traceback (most recent call last): File "/tmp/my_app/util/sqlalchemy_helpers.py", line 23, in pragma_journalm

我有一个flask应用程序,它创建一个sqlite db来加载测试装置。在osx中运行pytest时,没有任何问题。然而,当我在Ubuntu14.04 docker容器中设置“PRAGMA journal_mode=WAL”时,我得到了以下结果:

disk I/O error
Traceback (most recent call last):
  File "/tmp/my_app/util/sqlalchemy_helpers.py", line 23, in pragma_journalmode_wal
    cursor.execute('PRAGMA journal_mode=WAL')
OperationalError: disk I/O error 
sqlite db文件被写入tmp中的一个文件夹,该文件夹是使用python的tempfile.mkdtemp函数动态创建的。即使测试以root用户身份运行,因为docker,我仍然确保该文件夹具有完全的读/写/执行权限。我验证了/tmp上还有足够的空间。我有一个在数据库文件夹中创建、修改和删除文件的测试代码,并且它成功通过了


我似乎找不到一种方法来获取错误代码或更好地解释失败的原因。有没有办法更好地调试这个问题?docker容器可能有问题吗?

我现在在重新创建sqlite3数据库时遇到了类似的问题:

已删除database.sqlite3 已创建database.sqlite3 设置权限。 出现了错误。 经过一些测试,我发现我还有database.sqlite3-shm和database.sqlite3-wal 删除了database.sqlite3-shm和database.sqlite3-wal
一切都恢复正常。

如果执行除PRAGMA journal\u mode=WAL之外的任何操作,会发生什么?有一大堆的要求,需要,我怀疑你可能正在运行一个冲突。感谢回应!如果我删除OSX上的WAL模式,那么它在下一个SQL查询中失败。它似乎在任何类型的第一次查询中都失败了。我也尝试过关闭和截断日志模式,它们都会产生相同的错误。我在请求澄清时没有明确说明:如果根本没有PRAGMA,而是选择FROM或INSERT,会发生什么?从您的回复中,我无法判断SQLite是否在工作。可以说,使用journal_模式是过早的优化;换句话说,DB在引入密语之前会做DB的事情吗?如果没有PRAGMA语句,它会在第一次查询SELECT语句时失败。SQLite可以在任何地方工作,除了docker容器中。