如何在Dokku中使用Docker Compose?Matomo升级后Nginx 404求助
嘿,我来帮你解决这个Dokku部署新版Matomo的问题——我之前也踩过类似的坑,尤其是Dokku和Docker Compose配合的误区,咱们一步步来理清楚:
你把docker-compose.yml放在仓库根目录没效果,是因为Dokku本身不支持直接解析标准的docker-compose配置,它有自己的部署逻辑和插件体系。那个issue里提到的traefik配置是针对用Traefik做反向代理的场景,而Dokku用的是自带的Nginx反向代理,所以那套配置对你不适用。
方案1:用Dokku原生方式部署(更简单,推荐)
放弃docker-compose,直接用Dokku的原生流程来部署新版Matomo:
修正你的Dockerfile
确保它拉取最新镜像并正确暴露端口(新版crazy-max/matomo默认用Apache,暴露80端口):FROM crazymax/matomo:latest EXPOSE 80推送代码到Dokku后,配置域名
登录你的Dokku服务器,执行:dokku domains:set matomo your-matomo-hostname.com检查并设置端口映射
Dokku需要知道容器的端口和外部端口的映射关系,执行:# 查看当前端口映射 dokku proxy:ports matomo # 如果不是 http:80->80,手动设置 dokku proxy:ports-set matomo http:80:80配置必要的环境变量
新版Matomo需要数据库等环境变量,比如你用Dokku的Postgres插件的话,执行:dokku config:set matomo MATOMO_DATABASE_HOST=dokku-postgres-matomo dokku config:set matomo MATOMO_DATABASE_USER=matomo dokku config:set matomo MATOMO_DATABASE_PASSWORD=your-db-password dokku config:set matomo MATOMO_DATABASE_NAME=matomo排查404错误
如果还是404,先看容器日志确认Matomo服务是否正常启动:dokku logs matomo -t也可以进入容器内部,测试web服务是否正常:
dokku enter matomo # 容器内执行 curl localhost,看是否返回Matomo的页面
方案2:用Dokku的compose插件(适合多服务场景)
如果你确实需要用docker-compose(比如要同时部署Matomo和数据库),可以用Dokku官方的dokku-compose插件:
安装插件
sudo dokku plugin:install https://github.com/dokku/dokku-compose.git compose修改docker-compose.yml,添加Dokku识别标签
给你的Matomo服务加上Dokku专属的标签,让插件能正确识别:services: matomo: image: crazymax/matomo:latest ports: - "80:80" environment: MATOMO_DATABASE_HOST: db # 其他必要的环境变量... labels: - "dokku.app.name=matomo" - "dokku.http.port=80" db: image: mariadb:latest environment: MYSQL_ROOT_PASSWORD: your-root-pass MYSQL_DATABASE: matomo MYSQL_USER: matomo MYSQL_PASSWORD: your-db-pass volumes: - db-data:/var/lib/mysql volumes: db-data:用compose插件部署
把修改后的docker-compose.yml推送到Dokku仓库后,执行:dokku compose:up -d
这样就能让Dokku正确识别并部署你的docker-compose配置了。
内容的提问来源于stack exchange,提问作者waffl

