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

Node.js项目Docker容器运行失败,报错/bin/sh: 1: tee /opt/app.log: not found

解决Docker容器运行报错:/bin/sh: 1: tee /opt/app.log: not found

可能原因及对应解决方案

1. 目标目录无写入权限或不存在

官方node:14.16.1镜像默认以node用户运行,/opt目录归root所有,node用户没有写入权限,导致tee无法创建日志文件(shell解析可能将权限问题误显示为"not found")。

解决方法:

  • 方案A:将日志文件放在当前工作目录(/app,已拥有写入权限),修改Dockerfile的CMD:
    CMD sh ./init.sh 2>&1 | tee app.log
    
  • 方案B:提前创建/opt目录并赋予node用户权限,在Dockerfile中添加:
    RUN mkdir -p /opt && chown -R node:node /opt
    
    完整Dockerfile示例:
    FROM node:14.16.1
    WORKDIR /app
    COPY . /app
    RUN chmod 500 /app/init.sh
    RUN mkdir -p /opt && chown -R node:node /opt
    CMD sh ./init.sh 2>&1 | tee /opt/app.log       
    

2. 镜像缺少tee命令(针对Alpine变体)

如果实际使用的是node:14.16.1-alpine镜像(轻量Alpine版本),默认未包含tee命令,需安装coreutils包。

解决方法:
在Dockerfile中添加安装命令:

FROM node:14.16.1-alpine
WORKDIR /app
COPY . /app
RUN chmod 500 /app/init.sh
RUN apk add --no-cache coreutils
CMD sh ./init.sh 2>&1 | tee /opt/app.log       

3. 验证tee命令是否存在

可先在镜像中检查tee是否存在:

docker run --rm node:14.16.1 which tee

若输出/usr/bin/tee,说明命令存在,问题大概率出在目录权限/存在性上;若无输出,说明镜像缺少该命令,需按方法2处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 20:07:17