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

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更新后出现以下问题:

  1. 官方镜像移除了Python3,原脚本直接失效
  2. 进入容器执行apt-get失败(容器内无该命令)
  3. 尝试构建自定义镜像安装Python3,apt-get update因缺少公钥报错,安装gpg又提示依赖缺失
  4. 使用外部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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:25:58