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中设置工作目录为项目目录,同时修改日志路径为当前目录的相对路径:
- 在Dockerfile中添加:
WORKDIR /opt/folder_1 - 修改日志代码中的路径:
logging.basicConfig( filename="file_log.log", format='%(asctime)s: %(levelname)s: %(message)s', datefmt='%d/%m/%Y %H:%M:%S', filemode='w' )
- 在Dockerfile中添加:
内容的提问来源于stack exchange,提问作者user19480211
相关产品推荐
相关产品推荐

