我无法在docker容器中调试odoo。
我使用的是Visual代码,我有以下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有人知道我的调试配置有什么问题吗?
谢谢!!
更新
也许更多的信息是必要的。我使用一个坞-撰写文件启动odoo服务器,然后使用VSCode远程附加到该odoo。使用odoo命令重新启动服务器在VSCode终端上可以正常工作。
我有两个码头集装箱在运行:
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",
},但是,调试器将立即终止,不会出现错误消息。
发布于 2020-05-13 02:07:13
为了了解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 (远程)服务器通信。
2-启动你的容器。但是,您将启动您刚刚安装的debugpy的python包。它可能是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=odoo3-准备您的发射文件如下。请注意,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发布于 2020-01-16 17:52:11
我让它按照接下来的步骤工作:
docker-compose up或docker run启动容器docker exec -it -u 0 "container name" /bin/bash访问具有根权限的odoo容器pip3 install ptvsdaddons/__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"并在Networks部分下复制IPAddresslaunch.json,将容器ip粘贴在host字段和ptvsd附加方法( ex )上指定的port下面。在我的例子中,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": "."
}
]
}
]
}

注意:一定要将3000端口暴露在集装箱上。
发布于 2019-08-26 06:12:30
检查正在运行的容器,以及本地运行的odoo实例,这些实例肯定在该端口上运行。
lsof -i :8069 >>尝试使用您正在使用的端口号(而不是8069 )运行它。 要进一步查看所有正在运行的容器,可以使用pycham在容器中运行调试。
see also
https://stackoverflow.com/questions/57626427
复制相似问题