使用docker-compose时调试链接的docker容器

时间:2015-05-21 18:16:49

标签: python docker docker-compose

让我们假设我有以下docker-compose.yml文件并行运行两个不同的python应用程序(例如通过烧瓶):

app1:
  command: python app.py
  build: app1/

app2:
  command: python app.py
  build: app2/
  links:
    - app1

app2app1相关联,因为我希望从中获取app1中的特定数据。现在我的问题是我想要调试此链接的某个场景。我可以轻松地将app1app2调试为独立容器(通过docker-compose run --service-ports ... python app.py并将pdb放在代码中的某个位置)。我的问题是,如果请求来自app1,我想调试app2。如果我使用app1启动docker-compose run,则app2无法解析该链接。随着更多应用/服务根据链接相互“交谈”,这个问题变得更加严重。

有没有一个好方法来处理这个问题?你如何处理链接容器的调试问题(不一定是python的特定)?感谢您的投入。

1 个答案:

答案 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)