繁体   English   中英

Docker-compose 和 pdb

[英]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_13dir_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM