You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:14:57