iptv-aggregator / Dockerfile
wy9143's picture
Update Dockerfile
5aa9143 verified
Raw
History Blame Contribute Delete
1.35 kB
FROM python:3-alpine
ENV M3U_URL=https://raw.githubusercontent.com/best-fan/iptv-sources/master/cn_all.m3u8
COPY <<'APP' /app.py
import urllib.request, threading, time, os
from http.server import HTTPServer, BaseHTTPRequestHandler
M3U_URL = os.environ.get('M3U_URL', 'https://raw.githubusercontent.com/best-fan/iptv-sources/master/cn_all.m3u8')
content = ""
def refresh():
global content
while True:
try:
with urllib.request.urlopen(M3U_URL, timeout=30) as r:
content = r.read().decode()
print(f"[IPTV] 源已更新:{len(content)} 字节")
except Exception as e:
print(f"[IPTV] 更新失败:{e}")
time.sleep(43200) # 12小时
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/iptv':
self.send_response(200)
self.send_header('Content-Type', 'audio/x-mpegurl')
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
self.wfile.write(content.encode())
else:
self.send_response(404)
self.end_headers()
def log_message(self, *a): pass
t = threading.Thread(target=refresh, daemon=True)
t.start()
time.sleep(5)
HTTPServer(('0.0.0.0', 50086), Handler).serve_forever()
APP
EXPOSE 50086
CMD ["python", "/app.py"]