我有一个运行python服务器的docker容器,安装在我的本地卷上(如果我重新启动容器,它会更新)
但是,这非常难以调试。我正在使用PyCharm专业IDEA。
我曾尝试按照如何调试Docker容器内部的指南,但它只显示了如何在PyCharm中启动容器时这样做,在我的情况下我有一个很大的Terraform东西继续设置所有的环境,所以我必须找到一种附加到容器python解释器或类似的方式。
any1会有任何想法或指导吗?
谢谢 !
缺少获取完整视图所需的许多细节,但通常有两种调试容器的方法: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
在runnning容器中运行命令。例如,我经常想确保我的环境变量设置正确,所以我会运行这样的事情:
$ docker exec my_container env
您也可以使用它在正在运行的容器中创建一个shell:
$ docker exec -it my_container /bin/sh
这是通用的东西,但广泛用于调试容器。
注意:我上面使用的是/bin/sh
,因为许多小基础图像(如Alpine)没有安装bash。