windows - 在 Docker Windows 映像中安装 Ghostscript 返回非零代码:1
问题描述
- 开发环境:Windows Server 2019
- 码头工人版本:19.03.5
官方的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才能上网……
解决方案
我解决了!
我做了2个改变:
- 将基础映像从更改
jenkins/agent:jdk8-nanoserver-1809
为jenkins/agent:jdk8-windowsservercore-1809
(如果不这样做,下一步将无法工作,Windows Nano Server 不支持 Chocolatey) - 安装 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 安装程序最后也这么说。
推荐阅读
- javascript - 我希望仅在访问属性时才评估函数
- html - 如何在Angular的(鼠标悬停)内分配一个值?
- javascript - 如何使用反应路由器切换到滚动页面?
- javascript - Jasmine spyOn 应用于一个方法。等待一个 vue-test-utils 异步函数。现在,该方法不再是 Jasmine 间谍。为什么?
- python - 从没有库的 svm 的 2d 数据点中找到超平面
- reactjs - 无法将对象数据传递给模态
- assembly - 在 MASM 中调用 c 的打印
- ios - 如果我使用金属分配 MDLAsset,然后使用该资产初始化 SCNNode,是否将 SCNGeometrySource 对象复制到非金属缓冲区?
- java - 从网站下载列表(作为 CSV)并用 Java 解析
- docker - 希望 nginx 服务器将 /api/ 请求重定向到不同的端口。(上游时连接被拒绝)