You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker镜像中无file_log.log生成及CTRL+C无法终止程序问题

Docker运行Python Selenium项目的两个问题解决

问题1:按下CTRL+C无法终止程序

原因:Docker容器中PID 1的进程默认不会正确处理SIGINT信号,若Python程序未显式捕获该信号,或Selenium驱动的子进程未被正确终止,就会导致CTRL+C无法终止程序。

解决办法:

  • 方法一:运行容器时添加--init参数,让Docker内置的init进程接管PID 1,负责将信号转发给子进程:
    docker run -it --init docker_image
    
  • 方法二:在Python代码中显式捕获SIGINT信号,确保程序能优雅退出,同时清理Selenium资源:
    import signal
    import sys
    from selenium import webdriver
    
    def signal_handler(sig, frame):
        logger.info("程序被终止,正在清理资源...")
        # 若使用Selenium驱动,需添加关闭逻辑
        if 'driver' in globals():
            driver.quit()
        sys.exit(0)
    
    signal.signal(signal.SIGINT, signal_handler)
    

问题2:未生成file_log.log文件

原因:日志代码中使用相对路径../file_log.log,而Docker容器默认工作目录为根目录/,此时../仍指向根目录,日志文件实际生成在/file_log.log,而非项目所在的/opt/folder_1下,因此在该目录中无法看到。

解决办法:

  • 方法一:修改日志路径为项目目录的绝对路径:
    logging.basicConfig(
        filename="/opt/folder_1/file_log.log",
        format='%(asctime)s:  %(levelname)s:  %(message)s',
        datefmt='%d/%m/%Y  %H:%M:%S',
        filemode='w'
    )
    
  • 方法二:在Dockerfile中设置工作目录为项目目录,同时修改日志路径为当前目录的相对路径:
    1. 在Dockerfile中添加:
      WORKDIR /opt/folder_1
      
    2. 修改日志代码中的路径:
      logging.basicConfig(
          filename="file_log.log",
          format='%(asctime)s:  %(levelname)s:  %(message)s',
          datefmt='%d/%m/%Y  %H:%M:%S',
          filemode='w'
      )
      

内容的提问来源于stack exchange,提问作者user19480211

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 11:02:23