我有一个带有以下命令的Docker映像:
FROM ruby:2.4-alpine
WORKDIR /usr/src/app
COPY Gemfile /usr/src/app/Gemfile
COPY Gemfile.lock /usr/src/app/Gemfile.lock
RUN bundle config build.nokogiri --use-system-libraries
RUN bundle install --without development test
VOLUME /state
COPY . /usr/src/app/
ENTRYPOINT ["api-entrypoint.sh"]
CMD ["foreman", "start"]
它构建正确,但是当我尝试运行bash时,例如,我得到了container_linux.go:247: starting container process caused "exec: \"api-entrypoint.sh\": executable file not found in $PATH" docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"api-entrypoint.sh\": executable file not found in $PATH".
我尝试复制入口点文件,并使用CMD
给予其可执行权限...但没有任何效果
8条答案
按热度按时间ao218c7q1#
我在使用Docker for Windows时遇到了这个问题,解决方案是将入口点脚本文件从CRLF -〉LF更改。
kyxcudwk2#
我遇到了同样的问题--找不到入口点,但我确信它就在那里。
看起来您不能对入口点/命令使用单引号
'
。所以我从
到
而且很有效。
628mspwn3#
/usr/src/app可能不在您的路径中,因此您应包括脚本的完整路径。您还需要确保您的entrypoint.sh是可执行的,Docker将完全按照您的生成主机上的权限复制权限,因此根据您的方案,可能不需要此步骤。
lxkprmvk4#
问题的另一个来源可能是你的shebang,如果你有
/bin/bash
,而你的映像/基本映像中没有bash,它会告诉你你的入口点没有找到,这是我遇到的问题之一。oewdyzsn5#
在我的例子中,我有一个错误:
我只是运行dos2unix命令和问题消失:
brtdzjyr6#
我有一个golang应用程序的多阶段构建,在这个阶段出现了这个问题。golang可执行文件是在builder阶段(alpine镜像)构建的,然后复制到下一个阶段(debian镜像)。在第二个阶段出现了这个错误:
'mygoexecutable' not found or does not exist.
原因是可执行文件与第二阶段的映像不兼容,因为一些cgo引用只在构建器阶段可用。Afaik apline使用libc,debian映像使用glibc。解决方案是使用兼容的映像或在构建可执行文件时设置环境变量
CGO_ENABLED=0
(禁用cgo)。atmip9wb7#
在我的情况下,我确实尝试首先从Dockerfile中删除
EXEC
命令,以检查.sh入口文件是否存在,并确认它在那里。当我尝试从Docker容器内部运行.sh时,它显示.sh文件不存在。因此,我尝试使用
sh /path_to_entrypoint/your_sh_file.sh
命令运行.sh文件,它显示.sh文件中存在错误。经过一番研究,我找到了答案,为什么有一个错误的这篇文章:https://stackoverflow.com/a/67836849/10835742
lrpiutwd8#
如果你在ENTRYPOINT中使用了一个变量,它可能不会被解析。
这将不会执行变量替换。