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

Tor*_*cht 6 python docker docker-compose

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

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

app2:
  command: python app.py
  build: app2/
  links:
    - app1
Run Code Online (Sandbox Code Playgroud)

app2app1因为我希望从中获取特定数据app1.现在我的问题是我想要调试此链接的某个场景.我可以轻松地调试app1app2作为独立容器(通过docker-compose run --service-ports ... python app.py并放置pdb在代码中的某个位置).我的问题是当我想要调试app1以防请求来自app2.如果我开始app1使用docker-compose run,那么app2是不是能够解决的链接.随着更多应用/服务根据链接相互"交谈",这个问题变得更加严重.

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

qui*_*hts 5

如果您在同一台计算机上进行本地开发,则可以net: 'host'在配置中添加以下内容:

告诉Docker跳过将容器放在单独的网络堆栈中.从本质上讲,这个选择告诉Docker不要容器化网络!

有关详细信息,请参阅文档

app1:
  command: python app.py
  build: app1/
  net: 'host'

app2:
  command: python app.py
  build: app2/
  net: 'host'
Run Code Online (Sandbox Code Playgroud)

此外,您应该在守护进程模式下启动app1,在前台模式下启动app2以进行调试:

docker-compose up -d app1
docker-compose run app2
Run Code Online (Sandbox Code Playgroud)

一旦你收到从app1到app2的请求,你就会在app2中下载到(pdb)