让我们假设我有以下docker-compose.yml
文件并行运行两个不同的python应用程序(例如通过烧瓶):
app1:
command: python app.py
build: app1/
app2:
command: python app.py
build: app2/
links:
- app1
app2
与app1
相关联,因为我希望从中获取app1
中的特定数据。现在我的问题是我想要调试此链接的某个场景。我可以轻松地将app1
和app2
调试为独立容器(通过docker-compose run --service-ports ... python app.py
并将pdb
放在代码中的某个位置)。我的问题是,如果请求来自app1
,我想调试app2
。如果我使用app1
启动docker-compose run
,则app2
无法解析该链接。随着更多应用/服务根据链接相互“交谈”,这个问题变得更加严重。
有没有一个好方法来处理这个问题?你如何处理链接容器的调试问题(不一定是python的特定)?感谢您的投入。
答案 0 :(得分:5)
如果您在同一台计算机上进行本地开发,则可以在配置中添加net: 'host'
,执行以下操作:
告诉Docker跳过将容器放在单独的网络堆栈中。从本质上讲,这个选择告诉Docker不要容器化网络!
有关详细信息,请参阅the documentation
app1:
command: python app.py
build: app1/
net: 'host'
app2:
command: python app.py
build: app2/
net: 'host'
此外,您应该以守护进程模式启动app1,并以前台模式启动app2以进行调试:
docker-compose up -d app1
docker-compose run app2
一旦你收到app1到app2的请求,你就会在app2中下载到(pdb)