找不到 Docker 入口点.sh

问题描述 投票:0回答:3

按照概述的说明将 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

现在构建 docker 镜像

C:\> docker build -t cloudmapper .

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

C:/> docker run -t cloudmapper

错误

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

已验证该文件是否存在于适当的位置

在 Windows 10 上使用 Docker

dockerfile 中的图像是 python:3.7-slim

windows amazon-web-services docker dockerfile
3个回答
9
投票

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

bash 可以在以下情况下返回“文件未找到”

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

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

root
,也需要至少设置 1 个可执行位。

COPY --chmod=0755 *.sh /opt/cloudmapper/
ENTRYPOINT ["/opt/cloudmapper/entrypoint.sh"]

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

RUN
步骤。

如果您使用像 alpine 这样的轻量级基础镜像,可以通过确保

entrypoint.sh
的第一行使用 sh 而不是 bash 来解决第二个问题:

#!/bin/sh
set -e
# etc

此外,如果特别是在 Windows 上,请确保所有文件(尤其是入口点 .sh 文件)设置为 utf-8 编码,并带有 lf 样式行结尾。由于 linux 不理解 cr,它会尝试将

/bin/sh<cr>
作为显然不存在的 shell 来执行。

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

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


2
投票

就我而言,我有一个错误:

> [27/35] RUN /entrypoint.sh:
#31 0.503 /bin/sh: 1: /entrypoint.sh: not found

我只是运行 dos2unix 命令,问题就消失了:

dos2unix entrypoint.sh

0
投票

问题解决了

对于Windows用户,只需将entrypoint.sh文件的CRLF转换为LF即可

然后运行docker容器

© www.soinside.com 2019 - 2024. All rights reserved.