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

构建Node 14.16.1 Docker镜像时出现404资源获取失败问题

问题分析与解决方案

问题原因

node:14.16.1 基础镜像基于 Debian Stretch,该版本已到达官方支持生命周期终点(EOL),官方已移除对应软件源,导致执行 apt-get update 时出现404错误,无法正常获取软件包列表。

解决方案

方案1:替换为Debian归档源(临时修复)

在执行 apt-get update 前,将系统apt源替换为Debian归档服务器的源,修改Dockerfile中对应命令:

FROM node:14.16.1

# Prepare app directory
WORKDIR /api  # WORKDIR会自动创建目录,无需手动执行mkdir

ARG DO_PRODUCTION_BUILD
ENV DO_PRODUCTION_BUILD=$DO_PRODUCTION_BUILD

# 替换Debian Stretch为归档源
RUN echo "deb http://archive.debian.org/debian stretch main contrib non-free" > /etc/apt/sources.list && \
    echo "deb http://archive.debian.org/debian-security stretch/updates main contrib non-free" >> /etc/apt/sources.list && \
    apt-get update && \
    apt-get install -y tofrodos && \
    apt-get clean && rm -rf /var/lib/apt/lists/*  # 清理缓存缩小镜像体积

COPY ./docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh && fromdos /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

# 优化COPY顺序,先复制依赖文件利用Docker缓存
COPY package*.json ./
RUN rm -rf node_modules

RUN npm install -g pm2

RUN if [ "$DO_PRODUCTION_BUILD" = "yes" ]; then npm install && npm run build ; fi

# 复制剩余项目代码
COPY . .

CMD ["npm", "start"]

EXPOSE 3000

方案2:升级Node.js版本(推荐)

Node.js 14.x已结束官方支持,建议升级到仍在维护的LTS版本(如18.x或20.x),这些版本的基础镜像基于受支持的Debian发行版(如Bookworm或Bullseye),软件源可正常使用。例如修改基础镜像:

FROM node:18-alpine  # 或 node:20-bookworm

注意:升级Node.js版本后,需确认项目依赖是否兼容新版本,必要时调整package.json中的依赖版本。

额外优化建议

  • 调整COPY顺序:先复制package*.json再执行npm install,可利用Docker缓存,避免每次代码变动都重新安装依赖。
  • 合并RUN命令:减少镜像层数,同时清理apt缓存和npm缓存,降低镜像体积。
  • 使用Alpine镜像:若项目对系统依赖要求不高,可选择node:<version>-alpine镜像,体积更小、构建速度更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:35:49