Dockerfile-运行无法执行环境路径中可用的二进制文件

Dockerfile-运行无法执行环境路径中可用的二进制文件,docker,dockerfile,Docker,Dockerfile,创建dockerfile以安装依赖项二进制文件: FROM alpine RUN apk update \

创建
dockerfile
以安装依赖项二进制文件:

FROM alpine

RUN apk update \                                                                                                                                                                                                                        
    && apk add ca-certificates wget \                                                                                                                                                                                                      
    && update-ca-certificates 

RUN mkdir -p /opt/nodejs \
    && cd /opt/nodejs  \
    && wget -qO- https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.gz | tar xvz --strip-components=1

RUN chmod +x /opt/nodejs/bin/*

ENV PATH="/opt/nodejs/bin:${PATH}"

RUN which node
RUN node --version
哪个节点
正确地标识了
$PATH
中的节点二进制文件,因为
$PATH
由其前面的
ENV
命令修改。但是,
RUN节点--version
无法找到二进制文件

映像生成日志显示:

Step 11 : ENV PATH "/opt/nodejs/bin:${PATH}"
 ---> Using cache
 ---> 7dc04c05007f
Step 12 : RUN which node
 ---> Running in deeaf8e9fe09
/opt/nodejs/bin/node
 ---> 074820b1b9b5
Step 13 : RUN node --version
 ---> Running in 6f7eabd95e90
/bin/sh: node: not found
The command '/bin/sh -c node --version' returned a non-zero code: 127
在映像构建过程中调用已安装二进制文件的正确方法是什么

注:

  • 我还尝试将二进制文件链接到
    /bin
    ,但是
    sh
    仍然无法在
    RUN
    中找到它们
  • Docker版本1.12.1

  • 您安装的节点版本依赖于未包含在alpine基础映像中的库。它也可能与glibc而不是musl有关

    / # apk add file
    (1/2) Installing libmagic (5.28-r0)
    (2/2) Installing file (5.28-r0)
    Executing busybox-1.25.1-r0.trigger
    OK: 9 MiB in 15 packages
    / # file /opt/nodejs/bin/node
    /opt/nodejs/bin/node: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=862ecb804ed99547c06d5bd4ac1090da500acb61, not stripped
    / # ldd /opt/nodejs/bin/node
            /lib64/ld-linux-x86-64.so.2 (0x7f793665d000)
            libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f793665d000)
            librt.so.1 => /lib64/ld-linux-x86-64.so.2 (0x7f793665d000)
    Error loading shared library libstdc++.so.6: No such file or directory (needed by /opt/nodejs/bin/node)
            libm.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f793665d000)
    Error loading shared library libgcc_s.so.1: No such file or directory (needed by /opt/nodejs/bin/node)
            libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f793665d000)
            libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f793665d000)
    

    您可以找到在Alpine上安装节点的Dockerfile,这将是一个更好的起点。

    您的基本映像是什么?您能发布Dockerfile吗?@SRC已更新。这不是您问题的直接解决方案。但是如果我在官员的基本映像上构建映像,那么我可以直接运行
    节点--version
    。另一方面,基础图像的大小比裸露的阿尔卑斯山图像大。虽然导出的图像尺寸较小,但我认为这是问题所在。我试试看。