Docker-compose and pdb

17 浏览
0 Comments

Docker-compose and pdb

我看到我不是第一个问这个问题的人,但是没有一个明确的答案:

如何在Python开发中使用pdb和docker-composer?

当你在谷歌上搜索django docker,你会得到很棒的docker-composer示例和教程,我有一个工作环境 - 我可以运行docker-compose up,我有一个整洁的开发环境但是PDB不起作用(这非常令人伤心)。

我可以解决问题,运行docker-compose run my-awesome-app python app.py 0.0.0.0:8000,但是我不能从主机访问我的应用程序,只能通过http://127.0.0.1:8000访问(我可以用docker-compose up),而且每次使用run命令时都会创建新的容器,如:dir_app_13dir_db_4,这完全不是我想要的。

好心的人们,请帮助我。

PS

我在这个示例中使用了pdb ++,以及来自这个django示例的基本docker-compose.yml。我也进行了实验,但似乎没有任何帮助。我正在使用docker-composer 1.3.0rc3,因为它支持Dockerfile的指向。

0
0 Comments

问题出现的原因是在添加了stdin_open: truetty: true之后,出现了类似于TypeError: ord() expected a character, but string of length 0 found的问题。

解决方法是在Docker文件的顶部添加ENV LC_ALL en_US.UTF-8

以下是整理后的文章:

如果在添加了stdin_open: truetty: true之后,你开始遇到类似于TypeError: ord() expected a character, but string of length 0 found的问题,你可以尝试在Docker文件的顶部添加ENV LC_ALL en_US.UTF-8

示例代码如下:

FROM python:3.8.2-slim-buster as build_base
ENV LC_ALL en_US.UTF-8

这个问题的出现是因为在添加了stdin_open: truetty: true之后,可能会导致TypeError: ord() expected a character, but string of length 0 found错误。

为了解决这个问题,我们可以在Docker文件的顶部添加ENV LC_ALL en_US.UTF-8。这将设置环境变量LC_ALL为en_US.UTF-8,以确保正确的字符编码。

希望这个解决方法能够帮助你解决问题!

0
0 Comments

Docker-compose and pdb 是一个出现的问题,下面的内容给出了原因和解决方法。

原因:在使用 docker-compose up 启动所有容器时,无法通过附加 pdb 来调试 Python 脚本。

解决方法:

步骤1:在 yml 文件中添加以下内容:

stdin_open: true

tty: true

这将启用交互模式并附加 stdin。这相当于使用 -it 模式。

步骤2:执行以下命令:

docker attach 

这将进入 pdb shell。

这种方法对于大多数人来说效果很好,但也有一些人反映不起作用。在我看来,这个答案应该被接受。虽然有一些小问题,但绝对可以实现问题的要求。

需要注意的是,在步骤2中,需要附加到容器的 ID,而不是实例的 ID。可以通过执行 `docker ps` 命令来查看容器的 ID。

这种方法与 `docker-compose up` 结合使用非常有效。重要的是要注意,语句将在第二个 shell 标签页中打开,即在运行 `docker attach ` 命令的标签页中。

以上是附加 pdb 调试 Python 脚本的步骤。通过在 yml 文件中添加交互模式和附加 stdin 的配置,然后使用 `docker attach` 命令附加到容器 ID,就可以进入 pdb shell 进行调试。这个方法在大多数情况下都能正常工作,但也可能存在一些小问题。

0
0 Comments

问题出现的原因是使用docker-compose run命令无法在pdb中显示终端。

解决方法是使用--service-ports选项来运行web容器,命令为docker-compose run --service-ports web。另外,还可以使用docker-compose run --rm --service-ports my-awesome-app python app.py 0.0.0.0:8000来运行服务或测试。

同时,还需要添加-it选项,例如docker-compose run -it --service-ports web

另外,也可以使用docker-compose up命令来实现相同的功能。

若要在docker-compose run命令中运行其他服务,可以使用--name <name>选项来为容器命名,并使用--rm选项在容器停止后自动删除,命令示例如下:docker-compose run --rm --service-ports --name my-awesome-app my-awesome-app

感谢提供帮助的人,并解决了问题,节省了大量的时间。同时,还提出了如何在docker-compose run中进行调试会话,并解决了运行其他服务的问题。

0