【发布时间】:2021-08-03 12:48:17
【问题描述】:
我有一个 Alpine 容器,我将二进制文件复制到该容器(在本例中为 spar)。入口点是dumb-init /usr/bin/spar,但结果是No such file or directory。当我在容器内运行sh 时,/usr/bin/spar 存在。尝试运行它
dumb-init ...-
/usr/bin/spar/spar来自/ -
./spar/spar来自usr/bin/
所有都会导致相同的错误。我尝试使用chmod 777 /usr/bin/spar 更改权限,让每个人都可以完全访问,但还是没有运气。
我是否遗漏了 alpine 特有的内容?在另一个 SO 问题中,有人提到从 Alpine 切换到 Ubuntu 解决了他们的问题,但没有提供更多信息。
这是创建图像的 dockerfile
ARG intermediate=quay.io/wire/alpine-intermediate
ARG deps=quay.io/wire/alpine-deps
#--- Intermediate stage ---
FROM ${intermediate} as intermediate
#--- Minified stage ---
FROM ${deps}
ARG executable
ENV CACHEDEXECUTABLE ${executable}
COPY --from=intermediate /dist/${executable} /usr/bin/${executable}
# TODO: only if executable=brig, also copy templates. Docker image conditionals seem hacky:
# https://stackoverflow.com/questions/31528384/conditional-copy-add-in-dockerfile
# For now, adds ~2 MB of additional files into every container
COPY --from=intermediate /dist/templates/ /usr/share/wire/templates/
# ARGs are not available at runtime, create symlink at build time
# more info: https://stackoverflow.com/questions/40902445/using-variable-interpolation-in-string-in-docker
RUN ln -s /usr/bin/${executable} /usr/bin/service
ENTRYPOINT /usr/bin/dumb-init /usr/bin/${CACHEDEXECUTABLE}
【问题讨论】:
-
你能提供一个minimal reproducible example吗?如果它是动态链接的二进制文件,那么如果共享库或加载器不存在,您就可以获得该消息;如果它是一个脚本,如果脚本解释器不可用或脚本错误地具有 DOS 行结尾,您也会收到该错误。
-
你在运行什么镜像?你有要展示的 Dockerfile 吗?运行容器时是否在 /usr/bin 路径上映射任何卷?
-
@DavidMaze spar 是一个复制粘贴的二进制文件,它存在于目录中,但是当我尝试运行它时说它不存在,当我尝试 cat 它时,我得到一个输出二进制数据。 (由于要达到这一点需要很多步骤,因此很难重现)
-
@HansKilian 我已经添加了 dockerfile,如果有帮助,我也可以上传图像。我不认为我在映射任何卷