You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Debian Docker镜像部署Node.js遇编译失败及lsb-release安装错误求助

解决Debian上NodeSource脚本安装Node.js时lsb-release获取失败的问题

首先,咱们先理清问题的核心:你遇到的Bad header line Bad header data报错是APT源的网络/响应问题,而NodeSource的setup_x.x脚本之所以要安装lsb-release,是因为它需要通过这个工具的lsb_release -cs命令识别你的Debian发行版代号(比如stretch、buster),来配置对应版本的Node.js软件源。

下面分两种场景给你解决办法:

一、手动测试环境的临时修复

如果你只是在手动运行的Debian容器里测试,按以下步骤操作:

  1. 先尝试修复APT的缓存问题:
    apt-get update --fix-missing
    
  2. 如果还是报错,大概率是默认Debian源的网络问题,建议更换国内镜像源(比如阿里云):
    • 先备份原有的源配置:
      mv /etc/apt/sources.list /etc/apt/sources.list.bak
      
    • 写入适配Debian 10(buster,也就是你用的debian:latest)的阿里云源:
      echo "deb http://mirrors.aliyun.com/debian/ buster main non-free contrib" > /etc/apt/sources.list
      echo "deb http://mirrors.aliyun.com/debian-security/ buster/updates main" >> /etc/apt/sources.list
      echo "deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list
      
  3. 重新更新APT缓存,然后安装lsb-release
    apt-get update
    apt-get install -y lsb-release
    
  4. 这时候再运行NodeSource的setup脚本就应该没问题了:
    curl -sL https://deb.nodesource.com/setup_12.x | bash
    

二、优化你的Dockerfile(更推荐的方案)

注意到你的Dockerfile用的是debian:9(stretch),但手动测试用的是debian:latest(buster),版本不一致很容易导致问题。这里给你两个优化方向:

方向1:直接使用官方Node.js镜像(最省心)

官方Node.js镜像已经帮你处理好了所有依赖,完全不用自己折腾Debian源和安装步骤,简化后的Dockerfile如下:

# 选择对应版本的Node.js镜像,比如你原来用的10.x,或者需要的12.x
FROM node:10-slim
WORKDIR /app
# 复制项目文件到容器内
COPY . .
# 安装依赖
RUN npm install
EXPOSE 2368
VOLUME /app/logs
CMD ["npm", "run", "start"]

方向2:继续使用Debian基础镜像,修复源和依赖问题

如果一定要基于Debian构建,建议提前更换稳定的镜像源,并手动预安装lsb-release,避免脚本执行时出错:

FROM debian:9
# 更换阿里云的Debian 9(stretch)镜像源,避免网络问题
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo "deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib" > /etc/apt/sources.list \
    && echo "deb http://mirrors.aliyun.com/debian-security/ stretch/updates main" >> /etc/apt/sources.list \
    && echo "deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib" >> /etc/apt/sources.list

RUN apt-get update -yq \
    # 提前安装lsb-release,避免NodeSource脚本自动安装时出错
    && apt-get install curl gnupg lsb-release -yq \
    && curl -sL https://deb.nodesource.com/setup_10.x | bash \
    && apt-get install nodejs -yq \
    && apt-get clean -y

ADD . /app/
WORKDIR /app
RUN npm install
EXPOSE 2368
VOLUME /app/logs
CMD npm run start

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

火山引擎 最新活动