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

sbt-native-packager构建Docker镜像时安装Chrome报错排查

解决sbt-native-packager生成Dockerfile时RUN命令数组形式导致的shell语法解析错误

问题根源

你遇到的错误本质是Docker RUN命令的两种执行模式差异:

  • sbt-native-packager默认用数组形式定义RUN(Cmd("RUN", "cmd1", "arg1", "arg2"))属于Docker的exec模式,直接执行二进制程序,不会启动shell解释器。这种模式下,&&、管道|等shell语法会被当成命令的普通参数,而非控制结构,自然会触发apt-get的参数解析错误(比如-O参数的用法被破坏,&&被当成无效参数)。
  • 而你需要的是shell模式的RUN命令,让Docker调用/bin/sh -c来执行完整的命令串,这样shell语法才能正常解析。

解决方案:改用字符串形式定义RUN命令

把原本拆分的数组参数合并成一个完整的字符串,传给Cmd("RUN", ...):

示例:安装Chrome的正确配置

// build.sbt中配置dockerCommands
dockerCommands ++= Seq(
  // 用多行字符串包裹完整的shell命令,\用于换行续行
  Cmd("RUN", """
    apt-get update && \
    apt-get install -y wget gnupg && \
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable && \
    # 清理apt缓存减小镜像体积
    rm -rf /var/lib/apt/lists/*
  """.stripMargin)
)

关键注意点

  • 不要拆分shell语法元素:比如&&、|、重定向>这些必须和命令写在同一个字符串里,不能拆成数组的独立元素。
  • 用stripMargin处理多行格式:保证生成的Dockerfile格式整洁,避免不必要的空格。
  • 清理apt缓存:在安装后添加rm -rf /var/lib/apt/lists/*可以大幅减小镜像体积。

验证方法

执行sbt docker:stage命令,查看项目target/docker/stage/Dockerfile文件,确认RUN命令是类似下面的形式(单字符串包裹):

RUN apt-get update && \
    apt-get install -y wget gnupg && \
    wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
    echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list && \
    apt-get update && \
    apt-get install -y google-chrome-stable && \
    rm -rf /var/lib/apt/lists/*

而不是数组拆分的形式:

RUN ["apt-get", "update", "-O", "dir::cache::archives=/var/cache/apt/archives", "&&", "apt-get", "install", "-y", "chromium-browser"]

这样再执行sbt docker:publishLocal就不会出现参数解析错误了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:05:26