在Ubuntu上的Docker中为ECS部署shell脚本会导致'exec /pstart.sh:no such file or directory'错误,我该怎么解决?

jm2pwxwz  于 2023-06-05  发布在  Docker
关注(0)|答案(1)|浏览(179)

我想在docker中运行shell脚本并将其部署到ECS,但我收到以下错误
exec /pstart.sh:没有这样的文件或目录
请在下面找到docker文件和sh文件的内容

FROM public.ecr.aws/ubuntu/ubuntu:latest

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive \
    apt install -yq \
    curl \
    jq \
    openssh-server \
    unzip \
    vim \
    dnsutils \
    iputils-ping \
    iputils-tracepath

RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    rm -f awscliv2.zip && \
    ./aws/install

ADD pstart.sh /
RUN chmod +x /pstart.sh

RUN echo PasswordAuthentication no >> /etc/ssh/sshd_config
RUN echo Port 2224 >> /etc/ssh/sshd_config

CMD ["/pstart.sh"]

pstart.sh 如下

#!/bin/sh

ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

KEY_ID=$(aws kms list-aliases | jq -r '.Aliases | .[] | select(.AliasName=="alias/prod-smos-kms-key") | .TargetKeyId')

aws ssm put-parameter --name smos-ssh-tunnel --value "$(cat ~/.ssh/id_rsa)" --type "SecureString" --overwrite --key-id "${KEY_ID}"

service ssh start

while (true); do
  sleep 5000
done

在下面的图像中,您可以看到pstart.sh文件存在。

错误

我尝试改变EOL chartacter从CRLF LF LF建议在其他解决方案。
我试着改变#!/bin/bash到#!/bin/sh
我试着用ENTRYPOINT代替CMD。
我尝试COPY pstart.sh而不是ADD pstart.sh/

ctehm74n

ctehm74n1#

如果我从你的Dockerfile和pstart.sh脚本构建一个镜像,并在本地运行它,我会得到:

/pstart.sh: 3: Syntax error: redirection unexpected

这是因为您试图在pstart.sh中使用特定于Bash的语法(特别是<<<重定向操作符),但在您的映像中,/bin/sh不是Bash。
您可以通过将脚本中的“shebang”行替换为以下内容来解决此问题:

#!/bin/bash

通过此更改,容器引导时不会出现错误。
您还可以使用遗留的Bourne shell语法重写pstart.sh
我不能重现“没有这样的文件或目录”的错误,你的报告。

相关问题