我无法在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-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端口暴露在集装箱上。
https://stackoverflow.com/questions/57626427
复制相似问题