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
中找到它们您安装的节点版本依赖于未包含在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
。另一方面,基础图像的大小比裸露的阿尔卑斯山图像大。虽然导出的图像尺寸较小,但我认为这是问题所在。我试试看。