Docker-Compose部署Odoo社区版持续触发FileNotFoundError求助
Odoo 18社区版Docker-Compose部署FileNotFoundError问题
问题描述
使用Docker-Compose部署Odoo 18社区版,每次访问系统均触发FileNotFoundError,提示无法找到/var/lib/odoo/filestore/odoo2路径下的静态资源文件。已尝试调整目录权限、执行数据库初始化命令odoo -i base -d odoo --stop-after-init --db_host=db -r odoo -w odoo,问题未解决。
错误日志
FileNotFoundError: [Errno 2] No such file or directory: '/var/lib/odoo/filestore/odoo2/d5/d5a961acdc563028ec787d266bc68c36f2d3fcd9' odoo-app | 2024-11-29 16:13:17,559 1 INFO odoo2 werkzeug: 172.18.0.1 - - [29/Nov/2024 16:13:17] "GET /web/assets/f6b89c1/web.assets_web.min.css HTTP/1.0" 500 - 3 0.001 0.004 odoo-app | 2024-11-29 16:13:17,567 1 ERROR odoo2 odoo.http: Exception during request handling. odoo-app | Traceback (most recent call last): odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 2363, in __call__ odoo-app | response = request._serve_db() odoo-app | ^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 1891, in _serve_db odoo-app | return self._transactioning( odoo-app | ^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 1954, in _transactioning odoo-app | return service_model.retrying(func, env=self.env) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 137, in retrying odoo-app | result = func() odoo-app | ^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 1921, in _serve_ir_http odoo-app | response = self.dispatcher.dispatch(rule.endpoint, args) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 2081, in dispatch odoo-app | return self.request.registry['ir.http']._dispatch(endpoint) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 329, in _dispatch odoo-app | result = endpoint(**request.params) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 727, in route_wrapper odoo-app | result = endpoint(self, *args, **params_ok) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/binary.py", line 149, in content_assets odoo-app | stream = env['ir.binary']._get_stream_from(attachment, 'raw', filename) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_binary.py", line 125, in _get_stream_from odoo-app | stream = self._record_to_stream(record, field_name) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_binary.py", line 72, in _record_to_stream odoo-app | return record._to_http_stream() odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_attachment.py", line 797, in _to_http_stream odoo-app | stat = os.stat(stream.path) odoo-app | ^^^^^^^^^^^^^^^^^^^^ odoo-app | FileNotFoundError: [Errno 2] No such file or directory: '/var/lib/odoo/filestore/odoo2/7b/7b55d31b9a79e8320983384433d824527a234d27' odoo-app | 2024-11-29 16:13:17,568 1 INFO odoo2 werkzeug: 172.18.0.1 - - [29/Nov/2024 16:13:17] "GET /web/assets/0b7ece7/web.assets_web.min.js HTTP/1.0" 500 - 3 0.001 0.004 odoo-app | 2024-11-29 16:13:17,706 1 ERROR odoo2 odoo.http: Exception during request handling. odoo-app | Traceback (most recent call last): odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 2363, in __call__ odoo-app | response = request._serve_db() odoo-app | ^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 1891, in _serve_db odoo-app | return self._transactioning( odoo-app | ^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 1954, in _transactioning odoo-app | return service_model.retrying(func, env=self.env) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 137, in retrying odoo-app | result = func() odoo-app | ^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 1921, in _serve_ir_http odoo-app | response = self.dispatcher.dispatch(rule.endpoint, args) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 2081, in dispatch odoo-app | return self.request.registry['ir.http']._dispatch(endpoint) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 329, in _dispatch odoo-app | result = endpoint(**request.params) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/http.py", line 727, in route_wrapper odoo-app | result = endpoint(self, *args, **params_ok) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/web/controllers/binary.py", line 149, in content_assets odoo-app | stream = env['ir.binary']._get_stream_from(attachment, 'raw', filename) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_binary.py", line 125, in _get_stream_from odoo-app | stream = self._record_to_stream(record, field_name) odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_binary.py", line 72, in _record_to_stream odoo-app | return record._to_http_stream() odoo-app | ^^^^^^^^^^^^^^^^^^^^^^^^ odoo-app | File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_attachment.py", line 797, in _to_http_stream odoo-app | stat = os.stat(stream.path) odoo-app | ^^^^^^^^^^^^^^^^^^^^ odoo-app | FileNotFoundError: [Errno 2] No such file or directory: '/var/lib/odoo/filestore/odoo2/21/213c2ad586882be5d30aac75259f07ee2b1c2c31' odoo-app | 2024-11-29 16:13:17,707 1 INFO odoo2 werkzeug: 172.18.0.1 - - [29/Nov/2024 16:13:17] "GET /web/assets/c9cd4e1/web.assets_web_print.min.css HTTP/1.0" 500 - 3 0.001 0.004
配置文件
docker-compose.yml
version: '3.8' services: # PostgreSQL数据库服务 postgres: image: postgres:15 container_name: odoo-postgres environment: POSTGRES_USER: odoo3 POSTGRES_PASSWORD: odoo POSTGRES_DB: odoo POSTGRES_PORT: 5432 volumes: - postgres_data:/var/lib/postgresql/data networks: - app_network # Odoo 18社区版服务 odoo: image: odoo:18.0 container_name: odoo-app depends_on: - postgres environment: HOST: postgres USER: odoo3 PASSWORD: odoo PORT: 5432 DB: odoo ports: - "8069:8069" volumes: # - ./odoo:/mnt/extra-addons - ./odoo/odoo.conf:/etc/odoo/odoo.conf - ./odoo/addons:/mnt/addons - ./odoo/custom_addons:/mnt/custom_addons networks: - app_network # Next.js应用服务 nextjs: build: context: ./form dockerfile: Dockerfile container_name: nextjs-app ports: - "3000:3000" volumes: - ./form:/app # 挂载表单目录 networks: - app_network volumes: postgres_data: networks: app_network:
odoo.conf
[options] addons_path = /mnt/addons,/mnt/custom_addons data_dir = /var/lib/odoo admin_passwd = example@123
解决方案
1. 持久化Filestore目录
容器内/var/lib/odoo为临时目录,容器重启后数据丢失,需挂载到宿主机目录。修改docker-compose.yml中odoo服务的volumes:
volumes: # - ./odoo:/mnt/extra-addons - ./odoo/odoo.conf:/etc/odoo/odoo.conf - ./odoo/addons:/mnt/addons - ./odoo/custom_addons:/mnt/custom_addons - ./odoo/filestore:/var/lib/odoo # 添加此行,持久化filestore
2. 修复目录权限
宿主机新建的filestore目录需赋予容器内odoo用户(UID 1000)权限:
sudo mkdir -p ./odoo/filestore sudo chown -R 1000:1000 ./odoo/filestore
3. 匹配数据库名称
错误日志中指向的filestore目录为odoo2,但docker-compose配置中指定的数据库为odoo,需确认实际使用的数据库名称:
- 若数据库实际为
odoo2,修改docker-compose.yml中odoo服务的环境变量:environment: HOST: postgres USER: odoo3 PASSWORD: odoo PORT: 5432 DB: odoo2 # 修改为实际数据库名 - 若需使用
odoo数据库,删除旧的odoo2数据库并重新初始化:# 进入postgres容器 docker exec -it odoo-postgres psql -U odoo3 # 删除odoo2数据库 DROP DATABASE odoo2; # 退出容器 \q # 重新初始化odoo数据库 docker exec -it odoo-app odoo -i base -d odoo --stop-after-init --db_host=postgres -r odoo3 -w odoo
4. 强制更新静态资源
进入odoo容器,执行命令强制更新web模块的静态资源:
docker exec -it odoo-app odoo -d odoo2 --load=web --update=web # 对应实际数据库名
5. 清理残留容器与卷
若之前的容器存在数据残留,执行以下命令清理后重新启动:
docker-compose down -v docker-compose up -d
内容的提问来源于stack exchange,提问作者helen 1983
相关产品推荐
相关产品推荐

