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

标签 python docker docker-compose

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

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

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

app2 链接到 app1 因为我想从其中的 app1 获取特定数据。现在我的问题是我想调试这个链接的某个场景。我可以轻松地将 app1app2 作为独立容器进行调试(通过 docker-compose run --service-ports ... python app.py 和将 pdb 放在代码中的某处)。我的问题是当我想调试 app1 以防请求来自 app2。如果我使用 docker-compose run 启动 app1,则 app2 无法解析链接。随着更多应用程序/服务根据它们的链接相互“交谈”,这个问题变得更加严重。

有没有好的方法来处理这个问题?一般而言,您如何处理链接容器的调试问题(不一定是 python 特定的)?感谢您的意见。

最佳答案

如果您在同一台机器上进行本地开发,那么您可以将 net: 'host' 添加到您的配置中,该配置执行以下操作:

Tells Docker to skip placing the container inside of a separate network stack. In essence, this choice tells Docker to not containerize the container's networking!

更多信息见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)

关于python - 使用 docker-compose 时调试链接的 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30381410/

相关文章:

docker - 无法从 pod 容器内访问 kubernetes api

docker-compose - 如果在 docker-compose 中重新创建另一个容器,如何自动重启容器?

java - 无法使用容器将消息放入 ibm mq 中

docker - Docker在Ubuntu上是否有GUI?

python - Pygame 旋转射击

python - 在保留所有列的 Pandas 中获取每个类别的前 n 个值

amazon-web-services - 在 AWS 的现有 VPC 中创建 Kubernetes 集群

python - 重命名没有列名的 pandas 数据框的列

Python获取文件名并更改并将其保存在变量中

python - GitHub Actions 没有获取 Django 测试