tis*_*isq 5 debugging docker odoo visual-studio-code
我无法在 docker 容器中调试 odoo。
\n\n我正在使用 Visual Studio Code,并且具有以下 launch.json 配置。
\n\n{\n "version": "0.2.0",\n "configurations": [\n {\n "name": "Odoo 12",\n "type": "python",\n "request": "launch",\n "stopOnEntry": false,\n "pythonPath": "${config:python.pythonPath}",\n "program": "/usr/bin/odoo",\n "args": [\n "--config=/etc/odoo/odoo.conf"\n ]\n }\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n每次启动调试器时,都会出现此错误:
\n\nException in thread odoo.service.httpd:\nTraceback (most recent call last):\n File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner\n self.run()\n File "/usr/lib/python3.5/threading.py", line 862, in run\n self._target(*self._args, **self._kwargs)\n File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 410, in http_thread\n self.httpd = ThreadedWSGIServerReloadable(self.interface, self.port, app)\n File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 136, in __init__\n handler=RequestHandler)\n File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 476, in __init__\n HTTPServer.__init__(self, (host, int(port)), handler)\n File "/usr/lib/python3.5/socketserver.py", line 440, in __init__\n self.server_bind()\n File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 151, in server_bind\n super(ThreadedWSGIServerReloadable, self).server_bind()\n File "/usr/lib/python3.5/http/server.py", line 138, in server_bind\n socketserver.TCPServer.server_bind(self)\n File "/usr/lib/python3.5/socketserver.py", line 454, in server_bind\n self.socket.bind(self.server_address)\nOSError: [Errno 98] Address already in use\nRun Code Online (Sandbox Code Playgroud)\n\n有谁知道我的调试配置有什么问题?
\n\n谢谢!!
\n\n更新
\n\n也许需要更多信息。\n我使用 docker-compose 文件启动 odoo-server,然后使用 VSCode 远程连接到该 odoo-server。\n使用 odoo-bin 命令重新启动服务器可以在 VSCode 终端上正常工作。
\n\n我有两个正在运行的 docker 容器:
\n\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n4ac4a4c8481f odoo:12.0 "/entrypoint.sh odoo\xe2\x80\xa6" 7 days ago Up 4 minutes 0.0.0.0:8069->8069/tcp, 8071/tcp odoo-docker_web_1\n5910cce38985 postgres:10 "docker-entrypoint.s\xe2\x80\xa6" 7 days ago Up 4 minutes 5432/tcp odoo-docker_db_1\nRun Code Online (Sandbox Code Playgroud)\n\n并且只有 odoo 服务器在 8069 上运行:
\n\nodoo@4ac4a4c8481f:/mnt/extra-addons$ lsof -i :8069\nCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME\npython3 1 odoo 7u IPv4 44986 0t0 TCP *:8069 (LISTEN)\nRun Code Online (Sandbox Code Playgroud)\n\n所以我可能错误地使用了“启动”请求类型,因为它尝试重新启动服务器。\n我也测试过这个配置:
\n\n{\n "name": "Odoo 12 Attach",\n "type": "python",\n "request": "attach",\n "port": 8069,\n "host": "localhost", \n },\nRun Code Online (Sandbox Code Playgroud)\n\n但随后调试器立即终止,没有错误消息。
\n为了了解remote debugging所有 Python 服务或基于它的应用程序(例如 Odoo、Flask、Django、Web2py 等)的工作原理。你必须理解三个不同的概念:docker 容器、调试器、python 应用服务器(在我们的例子中是 Odoo)。所以在很多情况下,当从 docker 运行 Odoo 时,它就像下图所示:

请注意区别:
debugpy反之亦然(顺便说一下,你也可以使用 2 个端口)。Dockerfile. 通过调试,您可以将入口点修改为debugpy. 它将负责运行 Odooczuniga,方法非常好,几乎与以下相同:
适用于vscode 1.45.0及更高版本。参考文件https://gist.github.com/kerbrose/e646aaf9daece42b46091e2ca0eb55d0
1-编辑您的docker.dev文件并插入RUN pip3 install -U debugpy. 这将安装一个 python 包,debugpy而不是已弃用的包ptvsd,因为您的 vscode(本地)将debugpy使用它与 docker 映像的(远程)服务器进行通信。
2-启动您的容器。但是您将启动刚刚安装的 python 包debugpy。它可能是 shell 中的下一个命令。
docker-compose run --rm -p 8888:3001 -p 8879:8069 {DOCKER IMAGE[:TAG|@DIGEST]} /usr/bin/python3 -m debugpy --listen 0.0.0.0:3001 /usr/bin/odoo --db_user=odoo --db_host=db --db_password=odoo
Run Code Online (Sandbox Code Playgroud)
3- 按如下方式准备您的启动器文件。请注意,这port将与 odoo 服务器相关。debugServer将是调试服务器的端口
{
"name": "Odoo: Attach",
"type": "python",
"request": "attach",
"port": 8879,
"debugServer": 8888,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/mnt/extra-addons",
}
],
"logToFile": true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5443 次 |
| 最近记录: |