Docker容器重启报错/usr/bin/pm2不存在,Dockerfile已安装pm2如何解决
问题原因
- Alpine Linux系统下npm全局安装的二进制文件默认存放路径为
/usr/local/bin/pm2,你脚本中硬编码的/usr/bin/pm2路径与实际安装路径不匹配,导致系统找不到可执行文件。 - Docker构建缓存复用了历史异常层,可能之前构建时pm2安装失败,后续未清理缓存重复构建时直接复用旧层,导致pm2实际未正确安装。
- 部分版本Alpine官方源中的nodejs、npm包存在依赖缺失或版本过低问题,安装pm2时未正确生成全局可执行软链。
解决方法
- 修正启动脚本路径
编辑你的start.sh文件,将第5行的/usr/bin/pm2替换为实际安装路径/usr/local/bin/pm2,也可直接写pm2(系统会自动从PATH环境变量中匹配路径)。 - 优化Dockerfile配置
调整Dockerfile中pm2安装逻辑,安装完成后手动创建软链匹配你脚本的路径,示例修改如下:FROM ethereum/client-go RUN apk update && apk add bash RUN apk add --update git bash nodejs npm perl RUN cd /root &&\ git clone https://github.com/cubedro/eth-net-intelligence-api &&\ cd eth-net-intelligence-api &&\ npm install &&\ # 先更新npm到最新版本避免安装异常 npm install -g npm@latest &&\ npm install -g pm2 &&\ # 手动创建软链适配脚本路径 ln -sf /usr/local/bin/pm2 /usr/bin/pm2 ADD start.sh /root/start.sh ADD app.json /root/eth-net-intelligence-api/app.json RUN chmod +x /root/start.sh ENTRYPOINT /root/start.sh - 清理缓存重新构建
执行构建时添加--no-cache参数避免旧缓存干扰,命令如下:
容器启动完成后再执行geth attach命令即可正常操作。sudo docker-compose build --no-cache sudo docker-compose down && sudo docker-compose up -d
内容的提问来源于stack exchange,提问作者Developer9867152
相关产品推荐
相关产品推荐

