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

Docker Compose部署ProfitTrailer遇PM2配置文件找不到权限问题

ProfitTrailer Docker Compose部署问题:PM2找不到配置文件

用docker run命令测试镜像时容器能正常启动,但使用docker-compose up启动时,PM2提示找不到pm2-ProfitTrailer.json配置文件,推测是容器无法写入共享卷导致的问题。

我的Dockerfile

FROM eclipse-temurin:8-jdk-alpine

ARG PT_VERSION=2.5.32
ENV PT_VERSION ${PT_VERSION}

RUN mkdir -p /app/

# install tools
RUN apk update && apk add unzip curl

# install nodejs
RUN apk add --update nodejs npm
RUN npm install pm2@latest -g

# install profittrailer
RUN curl https://github.com/taniman/profit-trailer/releases/download/$PT_VERSION/ProfitTrailer-$PT_VERSION.zip -L -o /app/profittrailer.zip
RUN unzip /app/profittrailer.zip -d /app/ && mv /app/ProfitTrailer-$PT_VERSION /app/ProfitTrailer

WORKDIR /app/ProfitTrailer
RUN chmod +x ProfitTrailer.jar

VOLUME /app/ProfitTrailer

CMD pm2 start pm2-ProfitTrailer.json && pm2 log 0

EXPOSE 8081

我的docker-compose.yml

version: '3'
services:
  profittrailer:
    container_name: profittrailer
    image: "doccie/profittrailer:latest"
    volumes:
      - /home/[user]/.profittrailer:/app/ProfitTrailer
    restart: unless-stopped
    ports:
      - "8081:8081"

容器日志输出

profittrailer    | [PM2] Spawning PM2 daemon with pm2_home=/root/.pm2
profittrailer    | [PM2] PM2 Successfully daemonized
profittrailer    | [PM2][ERROR] File pm2-ProfitTrailer.json not found

问题原因

当你通过Docker Compose将宿主机目录/home/[user]/.profittrailer挂载到容器内的/app/ProfitTrailer时,宿主机的空目录(或不含pm2-ProfitTrailer.json的目录)会直接覆盖容器内原本存在该文件的目录,导致PM2启动时找不到配置文件。而docker run未挂载卷时,容器使用自身镜像内的目录,文件存在所以能正常启动。

解决方案

方案1:先复制容器内的配置文件到宿主机挂载目录

先启动临时容器,将镜像内的/app/ProfitTrailer目录内容复制到宿主机挂载目录:

docker run --rm -v /home/[user]/.profittrailer:/tmp/profittrailer doccie/profittrailer:latest cp -r /app/ProfitTrailer/. /tmp/profittrailer/

完成后再执行docker-compose up -d启动服务。

方案2:修改Dockerfile,自动初始化挂载卷

修改Dockerfile,在构建时备份原始目录,启动时如果挂载卷为空则自动复制备份内容:

FROM eclipse-temurin:8-jdk-alpine

ARG PT_VERSION=2.5.32
ENV PT_VERSION ${PT_VERSION}

RUN mkdir -p /app/

# install tools
RUN apk update && apk add unzip curl

# install nodejs
RUN apk add --update nodejs npm
RUN npm install pm2@latest -g

# install profittrailer
RUN curl https://github.com/taniman/profit-trailer/releases/download/$PT_VERSION/ProfitTrailer-$PT_VERSION.zip -L -o /app/profittrailer.zip
RUN unzip /app/profittrailer.zip -d /app/ && mv /app/ProfitTrailer-$PT_VERSION /app/ProfitTrailer

# 备份原始目录作为模板
RUN cp -r /app/ProfitTrailer /app/ProfitTrailer-template

WORKDIR /app/ProfitTrailer
RUN chmod +x ProfitTrailer.jar

VOLUME /app/ProfitTrailer

# 启动时检查挂载卷是否为空,为空则复制模板内容
CMD if [ -z "$(ls -A /app/ProfitTrailer)" ]; then cp -r /app/ProfitTrailer-template/. /app/ProfitTrailer/; fi && pm2 start pm2-ProfitTrailer.json && pm2 log 0

EXPOSE 8081

重新构建镜像后,再用Docker Compose启动即可。

方案3:只挂载需要持久化的子目录

避免覆盖整个/app/ProfitTrailer目录,只挂载需要持久化的子目录(比如配置、日志等),这样容器内的原始文件不会被覆盖:

version: '3'
services:
  profittrailer:
    container_name: profittrailer
    image: "doccie/profittrailer:latest"
    volumes:
      - /home/[user]/.profittrailer/config:/app/ProfitTrailer/config
      - /home/[user]/.profittrailer/logs:/app/ProfitTrailer/logs
      # 根据实际需求添加其他需要持久化的子目录
    restart: unless-stopped
    ports:
      - "8081:8081"

内容的提问来源于stack exchange,提问作者Pieter Helsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:25:23