在Docker容器中调试Python

时间:2018-08-29 13:41:44

标签: python docker

我有一个运行python服务器的docker容器,安装在我的本地卷上(例如,如果我重新启动该容器,它将更新)

但是,这很难调试。我正在使用PyCharm专业版IDEA。

我尝试遵循有关如何在docker容器中进行调试的指南,但仅显示了在PyCharm中启动容器时的操作方法,在我的案例中,我有大量的Terraform东西可以设置所有环境,因此我必须找到一种附加到容器python解释器或类似方法的方法。

任何人对此有任何想法或指南吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

要获得完整的视图,需要丢失许多细节,但是通常有两种调试容器的方法:1)调试运行中的容器和2)调试容器映像。

调试容器映像和构建失败

后者更容易,因为您可以查看特定图像的历史记录并在其中运行图层。

首先,我们看一下本地生成的图像:

$ docker images

REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
<none>                    <none>              77af4d6b9913        19 hours ago        1.089 GB
committ                   latest              b6fa739cedf5        19 hours ago        1.089 GB

接下来,我们可以选择一个特定的图像并对其运行docker history

$ docker history 77af4d6b9913
    IMAGE               CREATED             CREATED BY                                  SIZE                COMMENT
3e23a5875458        8 days ago          /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8            0 B
8578938dd170        8 days ago          /bin/sh -c dpkg-reconfigure locales &&    loc   1.245 MB
be51b77efb42        8 days ago          /bin/sh -c apt-get update && apt-get install    338.3 MB
4b137612be55        6 weeks ago         /bin/sh -c #(nop) ADD jessie.tar.xz in /        121 MB

然后,我们可以在图像历史记录中的任意位置选择一个图层并以交互方式运行该图层:

$ docker run -it --rm 3e23a5875458 /bin/sh

这将把您转储到一个shell中,您可以在其中运行映像构建过程中的下一个命令。如果您的docker build命令失败并且您需要了解原因,那么这非常有用,但是如果您只想查看特定容器(例如Python解释器,依赖性,PATH等)。

附加到正在运行的容器

这可能会有点混乱,但是类似地,您可以使用exec在运行容器的内部 中运行命令。例如,我经常想确保我的环境变量设置正确,所以我将运行以下命令:

$ docker exec my_container env

您也可以使用它在正在运行的容器内创建一个外壳:

$ docker exec -it my_container /bin/sh

这是通用的内容,但在调试容器时广泛有用。

注意:我在上面使用/bin/sh是因为许多小的基本映像(例如Alpine)没有安装bash。