按照概述的说明将 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
假设图像被删除并替换为文本,并且问题没有结束。
bash 可以在以下情况下返回“文件未找到”
您可以通过确保使用新的 --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 启示。
就我而言,我有一个错误:
> [27/35] RUN /entrypoint.sh:
#31 0.503 /bin/sh: 1: /entrypoint.sh: not found
我只是运行 dos2unix 命令,问题就消失了:
dos2unix entrypoint.sh