dockerfile
FROM python:3.9-slim # ... 其他配置 ... # 强制 Python 不缓存 stdout 和 stderr ENV PYTHONUNBUFFERED=1 CMD ["python", "main.py"]
python服务端
pythonimport signal
import time
import yaml
import os
# 定义全局变量存储配置
config = {}
def load_config():
"""读取并解析配置文件的函数"""
global config
try:
with open("config.yaml", "r") as f:
config = yaml.safe_load(f)
print(f"[{time.strftime('%H:%M:%S')}] 配置已加载: {config}")
except Exception as e:
print(f"加载失败: {e}")
def handle_sighup(signum, frame):
"""SIGHUP 信号处理回调函数"""
print(f"\n捕获到信号 {signum} (SIGHUP),执行热更新...")
load_config()
# 1. 初始化加载
load_config()
# 2. 注册信号监听
# 在 Linux 中,SIGHUP 通常用于通知守护进程重新加载配置
signal.signal(signal.SIGHUP, handle_sighup)
print(f"当前进程 PID: {os.getpid()}")
print("正在运行业务逻辑(每5秒循环一次),请尝试发送信号...\n")
try:
while True:
print(f"当前 [app_name] 是: {config.get('app_name')}")
time.sleep(5)
except KeyboardInterrupt:
print("\n服务已手动停止")
bash# 构建
docker build -t reload-test .
# 运行(将宿主机的 config.yaml 挂载进去,实现同步修改)
docker run -d --name my-app -v $(pwd)/config.yaml:/app/config.yaml reload-test
# 查看实时日志
docker logs -f my-app
本文作者:墨洺的文档
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!