gpt4 book ai didi

python - 如何在 Docker 容器中运行 pdb

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:29 24 4
gpt4 key购买 nike

我显然不明白这里的东西。我正在尝试在 Docker 容器中以交互方式运行 pdb 调试器。

这是一些代码:

Docker 文件:

FROM python:3.6
ENV PROJECT_DIR=/opt/foo
WORKDIR $PROJECT_DIR
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "foo.py"]

foo.py:

def hello_world():
print("hello world")
if __name__ == '__main__':
#import pdb; pdb.set_trace()
hello_world()

如果我运行 docker build -t foo . 然后 docker run foo,它会按预期打印出“hello world”。

但是如果我取消注释上面对 pdb.set_trace() 的调用并重试,我会收到以下错误:

/opt/foo/foo.py(8)<module>()
-> hello_world()
(Pdb)
Traceback (most recent call last):
File "foo.py", line 8, in <module>
hello_world()
File "foo.py", line 8, in <module>
hello_world()
File "/usr/local/lib/python3.6/bdb.py", line 51, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/local/lib/python3.6/bdb.py", line 70, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit

我没有得到什么?


编辑: BbdQuit raised when debugging python 不是重复的问题。

正如@soundstripe 正确识别的那样,我的问题是没有在 Docker 中为 pdb 提供交互式访问。

最佳答案

pdb 需要一个带有 TTY 的可用终端。您可以通过告诉 Docker 使用 -it 将容器中的交互式 TTY 附加到您的终端来轻松运行 pdb:

docker run -it foo

我通常还会添加 --rm 选项来删除我的临时容器。

docker run -it --rm foo

但这在调试期间并不总是最好的,因为当你完成后容器就消失了。

关于python - 如何在 Docker 容器中运行 pdb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55956715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com