【问题标题】:Digitalocean App: failed to load /usr/app/start.shDigitalocean 应用程序:无法加载 /usr/app/start.sh
【发布时间】:2021-03-07 09:42:45
【问题描述】:

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

starting non-root container [./start.sh]: creating process: failed to load /usr/app/start.sh: exec format error

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

gunicorn -b :5000 --access-logfile - --error-logfile - pixelshop:app

这是我的码头工人

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

【问题讨论】:

  • 在脚本开头添加“shebang”行#!/bin/sh 有帮助吗?
  • 如果你在 Windows 上设置 LF start.sh
  • start.sh 添加到您的问题中。根据您的 .sh 文件应该以bash 还是sh 开头,您应该将#!/bin/bash#!/bin/sh 添加到第一行,正好是第一行。

标签: python docker gunicorn digital-ocean


【解决方案1】:

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

  1. 正如 David Maze 建议的那样,确保将 shebang 作为 第一行 包含在您的 entrypoint.sh 文件中。

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

> docker inspect <YOUR_IMAGE_ID> --format '{{.Architecture}}'
arm64

如果您看到arm64,那么您应该在Dockerfile 中指定amd64 架构:

FROM --platform=linux/amd64 python:latest
# Rest for Dockerfile...

希望这对将来的某人有所帮助,因为我非常沮丧地试图弄清楚在部署新映像时发生了什么变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多