Matomo Docker容器因缺少Python3无法运行日志分析求助
解决Matomo日志导入脚本因Python缺失及线程错误的问题
问题背景
我通过以下docker-compose.yml运行Matomo:
version: "2" services: matomo: image: matomo environment: - MATOMO_DATABASE_HOST=matomo_db - VIRTUAL_HOST=webmon.extinctionrebellion.uk env_file: - ./db.env ports: - 8088:80 volumes: - ./config:/var/www/html/config:rw - ./logs:/var/www/html/logs - ./matomo:/var/www/html depends_on: - matomo_db restart: unless-stopped matomo_db: container_name: matomo_db image: mariadb command: --max-allowed-packet=64MB environment: - MYSQL_ROOT_PASSWORD=passwordredacted env_file: - ./db.env volumes: - ./mysql/:/var/lib/mysql restart: unless-stopped
原本使用Shell脚本导入Nginx日志:
cat /var/log/nginx/myserver.access.log.1 /var/log/nginx/myserver.access.log | docker-compose exec -T matomo python3 misc/log-analytics/import_logs.py --url='http://localhost' --idsite=mysiteid -
Matomo更新后出现以下问题:
- 官方镜像移除了Python3,原脚本直接失效
- 进入容器执行
apt-get失败(容器内无该命令) - 尝试构建自定义镜像安装Python3,
apt-get update因缺少公钥报错,安装gpg又提示依赖缺失 - 使用外部Python容器执行导入时,出现错误:
Traceback (most recent call last): File "/var/www/html/misc/log-analytics/import_logs.py", line 2690, in <module> main() File "/var/www/html/misc/log-analytics/import_logs.py", line 2652, in main recorders = Recorder.launch(config.options.recorders) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/html/misc/log-analytics/import_logs.py", line 1828, in launch t.start() File "/usr/local/lib/python3.11/threading.py", line 957, in start _start_new_thread(self._bootstrap, ()) RuntimeError: can't start new thread read unix @->/var/run/docker.sock: read: connection reset by peer
解决方案
方案1:使用Matomo官方带Python的镜像变体
Matomo官方提供了内置Python的镜像变体,标签格式为matomo:<version>-analytics(例如matomo:latest-analytics),直接替换原有镜像即可恢复原脚本功能:
修改docker-compose.yml中的Matomo服务配置:
services: matomo: image: matomo:latest-analytics # 其余配置保持不变
更新容器后,重新执行原日志导入脚本即可。
方案2:修复外部Python容器的线程及连接问题
若坚持使用外部Python容器,需解决线程资源限制和Matomo访问路径问题:
2.1 调整容器线程资源限制
启动Python容器时增加线程数限制,确保有足够资源运行导入脚本:
cat /var/log/nginx/myserver.access.log.1 /var/log/nginx/myserver.access.log | docker run -i --rm \ --ulimit nproc=1024:2048 \ --ulimit nofile=65536:65536 \ --network=$(basename $(pwd))_default \ -v $(pwd)/matomo:/var/www/html \ python:3.11-slim \ python /var/www/html/misc/log-analytics/import_logs.py --url='http://matomo' --idsite=mysiteid -
注:$(basename $(pwd))_default是Docker Compose默认生成的网络名称,若自定义过网络需替换为对应名称。
2.2 修正Matomo访问URL
外部Python容器无法通过localhost访问Matomo服务,需替换为Docker网络内的服务名matomo或实际域名。
方案3:构建正确的自定义Matomo镜像
若需要自定义镜像,可基于官方镜像解决依赖和公钥问题:
创建Dockerfile:
# 基于Debian基础的Matomo镜像 FROM matomo:latest RUN apt-get update && apt-get install -y --no-install-recommends \ gnupg2 \ python3 \ python3-pip \ && rm -rf /var/lib/apt/lists/* # 若使用Alpine基础镜像(matomo:latest-alpine),替换为以下命令: # RUN apk add --no-cache python3 py3-pip
构建自定义镜像:
docker build -t custom-matomo .
修改docker-compose.yml中的Matomo镜像为custom-matomo,重启容器后即可使用原脚本。
内容的提问来源于stack exchange,提问作者Nikki Locke
相关产品推荐
相关产品推荐

