【问题标题】:Python/Docker: How to use python logging module with docker?Python/Docker:如何在 docker 中使用 python 日志记录模块?
【发布时间】:2019-03-14 16:05:52
【问题描述】:

我有一个简单的设置,在 python 应用程序中设置了 python 的日志记录模块,如下所示:

app_logger = logging.getLogger('main_thread')

file_handler = RotatingFileHandler('/home/pi/FaunderGateway_Log.log', maxBytes=10000000, backupCount=5)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(name)s - %(message)s')
file_handler.setFormatter(formatter)

app_logger.addHandler(file_handler)

我有一个 RotatingFileHandler,它的绝对路径为“/home/pi/FaunderGateway_Log.log”(如果有人想知道,这个应用程序将在树莓派上运行),现在我正在尝试使用 docker 将应用程序容器化。

在构建并尝试运行我的容器后,出现错误:

[Errno 2] No such file or directory: '/home/pi/FaunderGateway_Log.log'

现在,我知道 docker 在容器中拥有自己的文件系统,与主机的 (pi) 文件系统分开,但我想告诉 docker 让我的 python 应用程序正常登录到主机的绝对路径 /home/pi/。 我怎样才能做到这一点?

我阅读了一些其他提到卷的线程,但我并不是很了解它们。

我正在使用这个命令来运行我的容器:

sudo docker run --privileged fg

--privileged 标志是为了让我可以访问 pi 上的 /dev/mem 文件,以进行 GPIO 操作。

更新:请注意,我希望我的 docker 容器在主机路径“/home/pi”中创建日志文件,我不想创建“/home/pi” " 容器内的目录。

【问题讨论】:

  • 你应该确保你的容器有“/home/pi”路径。
  • @ThuYeinTun 我希望我的容器在主机的“/home/pi”路径上生成日志文件,这样即使在容器停止运行后我也可以打开日志文件。
  • 在这种情况下,您应该更新您的问题以包含该信息。您可以使用 docker volume 将主机的目录挂载到 docker 容器的目录中。然后,您在该目录中写入的任何内容都将在主机中可用。
  • @ThuYeinTun 更新并加粗了重要部分:D 感谢您提供指向文档的链接!它有很大帮助。我不知道这叫做绑定挂载。

标签: python docker logging raspberry-pi3


【解决方案1】:

尝试:

docker run -v [host_path]:[container_path]

在您的情况下,host_path/home/pi,并将 container_path 更改为容器中的日志文件目录。

【讨论】:

    【解决方案2】:

    卷可以解决问题。一个容器有它自己的文件系统。使用卷就像将包含文件的笔式驱动器从您的主机连接到 docker 容器。

    在你的情况下,你可以这样做:

    sudo docker run --privileged fg -v /home/pi:/pi
    

    现在,这将在您的容器的根目录中创建一个名为pi 的文件夹,该文件夹链接到您主机中的/home/pi

    因此,在您的 python 应用程序中指定 /pi 作为目录。

    Relevant documentation

    【讨论】:

    • 接受了这个答案以获得很好的解释,谢谢:D 我刚刚使用了“sudo docker run --privileged fg -v /home/pi:/home/pi”,它起作用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2013-03-24
    • 1970-01-01
    • 2017-12-26
    • 2014-01-09
    • 2011-02-27
    相关资源
    最近更新 更多