我想在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/
1条答案
按热度按时间ctehm74n1#
如果我从你的Dockerfile和
pstart.sh
脚本构建一个镜像,并在本地运行它,我会得到:这是因为您试图在
pstart.sh
中使用特定于Bash的语法(特别是<<<
重定向操作符),但在您的映像中,/bin/sh
不是Bash。您可以通过将脚本中的“shebang”行替换为以下内容来解决此问题:
通过此更改,容器引导时不会出现错误。
您还可以使用遗留的Bourne shell语法重写
pstart.sh
。我不能重现“没有这样的文件或目录”的错误,你的报告。