Digitalocean应用程序:无法加载/usr/app/start.sh

Ude*_*ili 2 python gunicorn docker digital-ocean

我真的不明白这个。我正在尝试使用 Gunicorn 将我的 python 应用程序从 GitHub 部署到 docker 来启动该应用程序。但在构建成功后但在部署开始之前我不断收到此错误

starting non-root container [./start.sh]: creating process: failed to load /usr/app/start.sh: exec format error
Run Code Online (Sandbox Code Playgroud)

我尝试更改 start.sh 文件的权限,但它没有改变。这是我的start.sh

gunicorn -b :5000 --access-logfile - --error-logfile - pixelshop:app
Run Code Online (Sandbox Code Playgroud)

这是我的码头工人

FROM python:latest
WORKDIR /usr/app
COPY . .
RUN apt-get update
RUN apt-get install -y libgl1-mesa-dev
RUN pip install -r requirements.txt
RUN pip install Flask
RUN pip install gunicorn
RUN chmod +x start.sh
ENTRYPOINT  ./start.sh
Run Code Online (Sandbox Code Playgroud)

小智 9

我认为这里可能发生两件事。

  1. 正如 David Maze 所建议的,请确保将 shebang 作为文件的第一行entrypoint.sh

  2. 我的问题是我的新 M1 Macbook Pro 使用 ARM64 架构,而 DigitalOcean 似乎只支持 AMD64 图像。您可以使用以下命令检查您的 docker 映像:

> docker inspect <YOUR_IMAGE_ID> --format '{{.Architecture}}'
arm64
Run Code Online (Sandbox Code Playgroud)

如果您看到arm64您,那么您应该amd64在您的文件中指定架构,Dockerfile如下所示:

FROM --platform=linux/amd64 python:latest
# Rest for Dockerfile...
Run Code Online (Sandbox Code Playgroud)

希望这对将来的人有所帮助,因为我在尝试找出部署新映像时发生的变化时感到非常沮丧。

  • 是的,这就是我购买 M1 MBP 后遇到的问题。谢谢! (2认同)