高山Docker容器无法将UPX识别为可执行文件

时间:2018-08-14 13:01:25

标签: docker alpine upx

堆垛机,

我正在使用Docker容器化我的应用程序。在下面的stage中,我尝试使用UPX对其进行打包。

FROM alpine:3.8 AS compressor

# Version of upx to be used(without the 'v' prefix)
# For all releases, see https://github.com/upx/upx/releases
ARG UPX_VERSION=3.94

# Fetch upx, decompress it, make it executable.
ADD https://github.com/upx/upx/releases/download/v${UPX_VERSION}/upx-${UPX_VERSION}-amd64_linux.tar.xz /tmp/upx.tar.xy
RUN tar -xJOf /tmp/upx.tar.xy upx-${UPX_VERSION}-amd64_linux/upx > /usr/local/bin/upx \ 
 && chmod +x /usr/local/bin/upx

COPY --from=builder /usr/local/bin/ace /usr/local/bin/ace

RUN /usr/local/bin/upx --overlay=strip --best /usr/local/bin/ace

问题是当我构建图像时,出现以下错误:

  

命令'/ bin / sh -c / usr / local / bin / upx --overlay = strip --best   / usr / local / bin / ace'返回了非零代码:127

由于某些原因,容器无法将upx识别为可执行文件!谁能给我一些指示?

4 个答案:

答案 0 :(得分:2)

结果是有一个UPX的apk软件包。更简单的安装方法是:

apk add upx

答案 1 :(得分:0)

您拥有的归档文件只是文件,因此无法按名称寻址。如果您提取整个内容(仅是文件),它将起作用。将Dockerfile中的相应行更改为以下内容:

RUN tar -xJOf /tmp/upx.tar.xy upx-${UPX_VERSION}-amd64_linux > /usr/local/bin/upx \

请注意,我从档案名称中删除了文件名。

答案 2 :(得分:0)

添加apk add --no-cache upx=3.95-r1(截至2019年3月)。

答案 3 :(得分:0)

要使其与Dockerfile一起使用:

(根据您的喜好调整Alpine版本)

FROM alpine:latest as build
RUN apk add --no-cache upx

# Build and use upx as applicable...