[英]Docker-compose and pdb
我看到我不是第一个提出这个问题的人,但对此没有明确的答案:
如何在 Python 开发中使用 pdb 和 docker-composer?
当您向 Google 叔叔询问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_13
和dir_db_4
,我根本不想要。
请好心人帮助我。
附言
我在该示例中使用 pdb++,并在此 django 示例中使用了基本的 docker-compose.yml。 我也尝试过,但似乎没有任何帮助。 我正在使用 docker-composer 1.3.0rc3 ,因为它支持 Dockerfile 指向。
使用以下步骤在任何 python 脚本上附加 pdb。
步骤 1. 在您的 yml 文件中添加以下内容
stdin_open: true
tty: true
这将启用交互模式并附加标准输入。 这等效于 -it 模式。
第2步。
docker attach <generated_containerid>
您现在将获得 pdb shell
尝试使用 --service-ports 选项运行您的 Web 容器: docker-compose run --service-ports web
根据我的经验, docker-compose up
命令不提供交互式 shell,但它启动打印 STDOUT 到默认只读 shell。
或者,如果您指定并映射了日志目录, docker-compose up
命令将不会在附加的 shell 上打印任何内容,但会将输出发送到您的映射日志。 因此,一旦容器运行,您必须单独附加容器。
当您执行docker-compose up
,通过-d
使其处于分离模式并通过连接到容器
docker exec -it your_container_name bash
如果添加后
stdin_open: true
tty: true
您开始遇到类似的问题:
fd = self._input_fileno()
if fd is not None and fd in ready:
> return ord(os.read(fd, 1))
E 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.