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

Docker中Tini触发“no such file or directory”错误的解决方法

解决Kubernetes中tini执行报错问题

问题描述

构建镜像使用如下Dockerfile:

#
# SPDX-License-Identifier: Apache-2.0
#
FROM node:16 AS builder

WORKDIR /usr/src/app

# Copy node.js source and build, changing owner as well
COPY --chown=node:node . /usr/src/app
ENV npm_config_cache=/usr/src/app
RUN npm ci && npm run package


FROM node:16 AS production
ARG CC_SERVER_PORT

# Setup tini to work better handle signals
ENV TINI_VERSION v0.19.0
ENV PLATFORM=amd64
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-${PLATFORM} /tini
RUN chmod +x /tini

WORKDIR /usr/src/app
COPY --chown=node:node --from=builder /usr/src/app/dist ./dist
COPY --chown=node:node --from=builder /usr/src/app/package.json ./
COPY --chown=node:node --from=builder /usr/src/app/npm-shrinkwrap.json ./
COPY --chown=node:node docker/docker-entrypoint.sh /usr/src/app/docker-entrypoint.sh

RUN npm ci --omit=dev && npm cache clean --force

ENV PORT $CC_SERVER_PORT
EXPOSE $CC_SERVER_PORT
ENV NODE_ENV=production

USER node
ENTRYPOINT [ "/tini", "--", "/usr/src/app/docker-entrypoint.sh" ]

构建过程成功,但在Kubernetes集群中运行容器时,出现错误:

exec /tini: no such file or directory

解决方案

1. 替换为tini-static静态编译版本

当前下载的tini是动态链接版本,可能与基础镜像的系统库不兼容,导致执行时触发类似“文件不存在”的错误。换成静态编译版本即可解决:
修改Dockerfile中下载tini的行:

ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static-${PLATFORM} /tini

静态版本不依赖系统库,能彻底避免链接依赖问题。

2. 从基础镜像包管理器安装tini

node:16基于Debian系统,可直接通过apt安装官方维护的tini包,保证与系统环境完全兼容:
删除原有下载tini的代码段,替换为:

RUN apt-get update && apt-get install -y --no-install-recommends tini && rm -rf /var/lib/apt/lists/*

3. 匹配Kubernetes节点架构与镜像PLATFORM

如果K8s集群使用ARM架构节点(如ARM64),但Dockerfile硬编码PLATFORM=amd64,会导致下载的tini是x86架构,在ARM节点上无法执行,触发“文件不存在”的报错(实际是架构不兼容)。
解决方法:

  • 动态获取当前构建平台:
    ENV PLATFORM=$(dpkg --print-architecture)
    
  • 或者构建多架构镜像,适配集群内不同节点的架构。

4. 验证tini文件完整性与权限

在Dockerfile中添加验证步骤,确保tini正确下载且具备执行权限:

ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static-${PLATFORM} /tini
RUN chmod +x /tini && ls -l /tini && /tini --version

如果构建时这一步失败,说明下载过程存在网络或资源问题,可检查网络连接或替换下载源。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:57:33