首页 > 解决方案 > 在 Docker Windows 映像中安装 Ghostscript 返回非零代码:1

问题描述

官方的Ghostscript 文档说明了有关在 Windows 上安装的信息:

4.1 安装

要在 Windows 上安装 Ghostscript,您应该运行安装程序可执行文件。

安装程序基于 NSIS(另见 Release.htm)并支持一些标准 NSIS 选项:/NCRC 禁用 CRC 检查,/S 静默运行安装程序或卸载程序,/D 设置默认安装目录(它必须是最后一个命令行中使用的参数,并且不能包含任何引号,即使路径包含空格。仅支持绝对路径)。

按照这个文档,我把它放在我的Dockerfile

FROM jenkins/agent:jdk8-nanoserver-1809

WORKDIR /tmp
ADD https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs952/gs952w64.exe .
RUN C:\tmp\gs952w64.exe /S

这是的输出docker build

Sending build context to Docker daemon  5.632kB 
Step 1/4 : FROM jenkins/agent:jdk8-nanoserver-1809 
 ---> 026ce64bdabf
Step 2/4 : WORKDIR /tmp
 ---> Using cache
 ---> fd854f6da0a9
Step 3/4 : ADD https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs952/gs952w64.exe .
Downloading [==================================================>]  27.64MB/27.64MB 
 ---> Using cache
 ---> 259453368869 
Step 4/4 : RUN C:\tmp\gs952w64.exe /S 
 ---> Running in c86c8393a4fa 
The command 'pwsh.exe -Command $ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue'; C:\tmp\gs952w64.exe /S' returned a non-zero code: 1

这意味着没有安装 Ghostscript。

这是因为我没有指定安装目录吗?我对默认目录没问题。

还是我应该完全放弃手动安装并使用某种包管理器?不知道现在windows是怎么做到的,上次我用windows还是得安装小号winsock才能上网……

标签: windowsdockernsisghostscript

解决方案


我解决了!

我做了2个改变:

  1. 将基础映像从更改jenkins/agent:jdk8-nanoserver-1809jenkins/agent:jdk8-windowsservercore-1809(如果不这样做,下一步将无法工作,Windows Nano Server 不支持 Chocolatey)
  2. 安装 Chocolatey 作为包管理器
FROM jenkins/agent:jdk8-windowsservercore-1809

ADD https://chocolatey.org/installchocolatey.cmd .
RUN .\installchocolatey.cmd
RUN choco install --yes ghostscript --version=9.24 ;\
    choco install --yes imagemagick --version=7.0.10.14 ;\

是的,两个单独的RUN命令。您必须这样做,因为需要重新启动 Windows shell 才能找到 Chocolatey。我很难找到这一点,但 Chocolatey 安装程序最后也这么说。


推荐阅读