找不到 Docker Entrypoint.sh

Raj*_*esh 4 windows amazon-web-services docker dockerfile

按照概述的说明将 Duo CloudMapper 部署到 AWS 环境并收到错误

Docker 文件

FROM python:3.7-slim as cloudmapper

LABEL maintainer="https://github.com/0xdabbad00/"
LABEL Project="https://github.com/duo-labs/cloudmapper"

WORKDIR /opt/cloudmapper
ENV AWS_DEFAULT_REGION=us-east-1 

RUN apt-get update -y
RUN apt-get install -y build-essential autoconf automake libtool python3.7-dev python3-tk jq awscli

COPY cloudmapper/. /opt/cloudmapper
COPY entrypoint.sh /opt/cloudmapper/entrypoint.sh

# Remove the demo data
RUN rm -rf /opt/cloudmapper/account-data/demo

# Install the python libraries needed for CloudMapper
RUN cd /opt/cloudmapper && pip install -r requirements.txt


ENTRYPOINT /opt/cloudmapper/entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

现在构建 docker 镜像

C:\> docker build -t cloudmapper .
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令运行 docker 时,出现错误

C:/> docker run -t cloudmapper
Run Code Online (Sandbox Code Playgroud)

错误

/bin/sh: 1: /opt/cloudmapper/entrypoint.sh: not found

验证该文件存在于适当的位置附截图

在 Windows 10 上使用 Docker

dockerfile 中的图像是 python:3.7-slim

Chr*_*cke 9

假设图像被删除并替换为文本,并且问题没有结束。

bash 可能会返回“找不到文件”

  • 入口点 shell 脚本未标记为当前用户可执行
  • 入口点 shell 脚本中的 hash bang 指向不存在的二进制文件
  • shell脚本实际上不存在。

您可以通过确保使用新的 --chmod 标志来确保设置可执行位来解决第一个问题。即使用户是,root也需要至少设置 1 个可执行位。

COPY --chmod=0755 *.sh /opt/cloudmapper/
ENTRYPOINT ["/opt/cloudmapper/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

附:此集成 COPY --chmod 仅适用于启用 buildkit 的构建,因此您可能需要强制 buildkit,或将 chmod 拆分为单独的显式RUN步骤。

entrypoint.sh如果您使用像 alpine 这样的轻量级基础镜像,可以通过确保第一行使用 sh 而不是 bash 来解决第二个问题:

COPY --chmod=0755 *.sh /opt/cloudmapper/
ENTRYPOINT ["/opt/cloudmapper/entrypoint.sh"]
Run Code Online (Sandbox Code Playgroud)

另外,如果特别是在 Windows 上,请确保所有文件(尤其是入口点 .sh 文件)设置为 utf-8 编码,并带有 lf 样式行结尾。由于linux不理解cr,它会尝试/bin/sh<cr>以显然不存在的shell来执行。

如果文件不存在,请验证entrypoint.sh是否被复制到env.PATH引用的位置,或者入口点指令使用完全限定的路径。

--
编辑添加 cr-lf 启示。

  • 必须将 .sh 文件中的 CRLF 更新为 LF 并且它可以工作。感谢您的帮助 (3认同)