gpt4 book ai didi

docker - 如何在docker中调试odoo?

转载 作者:行者123 更新时间:2023-12-02 18:03:48 27 4
gpt4 key购买 nike

我无法在 docker 容器中调试 odoo。

我正在使用 Visual Studio Code,并且有以下 launch.json 配置。

{
"version": "0.2.0",
"configurations": [
{
"name": "Odoo 12",
"type": "python",
"request": "launch",
"stopOnEntry": false,
"pythonPath": "${config:python.pythonPath}",
"program": "/usr/bin/odoo",
"args": [
"--config=/etc/odoo/odoo.conf"
]
}
]
}

每次启动调试器时,都会发生此错误:
Exception in thread odoo.service.httpd:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 410, in http_thread
self.httpd = ThreadedWSGIServerReloadable(self.interface, self.port, app)
File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 136, in __init__
handler=RequestHandler)
File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 476, in __init__
HTTPServer.__init__(self, (host, int(port)), handler)
File "/usr/lib/python3.5/socketserver.py", line 440, in __init__
self.server_bind()
File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 151, in server_bind
super(ThreadedWSGIServerReloadable, self).server_bind()
File "/usr/lib/python3.5/http/server.py", line 138, in server_bind
socketserver.TCPServer.server_bind(self)
File "/usr/lib/python3.5/socketserver.py", line 454, in server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

有谁知道我的调试配置有什么问题?

谢谢!!

更新

也许需要更多信息。
我使用 docker-compose 文件启动 odoo-server,然后使用 VSCode 远程连接到该 odoo-server。
使用 odoo-bin 命令重新启动服务器在 VSCode 终端上工作正常。

我有两个 docker 容器正在运行:
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
4ac4a4c8481f odoo:12.0 "/entrypoint.sh odoo…" 7 days ago Up 4 minutes 0.0.0.0:8069->8069/tcp, 8071/tcp odoo-docker_web_1
5910cce38985 postgres:10 "docker-entrypoint.s…" 7 days ago Up 4 minutes 5432/tcp odoo-docker_db_1

只有 odoo 服务器在 8069 上运行:
odoo@4ac4a4c8481f:/mnt/extra-addons$ lsof -i :8069
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python3 1 odoo 7u IPv4 44986 0t0 TCP *:8069 (LISTEN)

所以可能我使用“启动”请求类型是错误的,因为它试图重新启动服务器。
我也测试了这个配置:
{
"name": "Odoo 12 Attach",
"type": "python",
"request": "attach",
"port": 8069,
"host": "localhost",
},

但随后调试器立即终止,没有错误消息。

最佳答案

我按照以下步骤使其工作:

  • 使用 docker-compose up 启动容器或 docker run
  • 使用 root 权限访问您的 odoo 容器docker exec -it -u 0 "container name" /bin/bash
  • 安装 ptvsd pip3 install ptvsd
  • 更新odoo addons/__init__.py文件以启用 ptvsd 附件,在 /usr/lib/python3/dist-packages/odoo/addons/__init__.py 中找到文件并在文件末尾添加以下代码:
  • import ptvsd
    ptvsd.enable_attach(address=('0.0.0.0', 3000))

    ptvsd.wait_for_attach()
  • 退出容器并使用 docker-compose restart 重新启动或 docker restart "container name"
  • 执行 docker inspect "container name"并复制 IPAddressNetworks
  • 打开visual studio并创建launch.json ,将容器ip粘贴到host下场和 port这是在 ptvsd attach 方法中指定的,例如。在我的情况下,ip 是 172.27.0.3
  • {
    "version": "0.2.0",
    "configurations": [
    {
    "name": "Python: Remote Attach",
    "type": "python",
    "request": "attach",
    "port": 3000,
    "host": "172.27.0.3",
    "pathMappings": [
    {
    "localRoot": "${workspaceFolder}",
    "remoteRoot": "."
    }
    ]
    }
    ]
    }
  • 单击开始调试,您应该可以在 上看到 odoo 日志。调试控制台

  • enter image description here

    注意:一定要在容器上暴露3000端口

    关于docker - 如何在docker中调试odoo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626427/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com