接收操作错误:[Errno 8]在Docker容器中运行的应用程序出现Exec格式错误

nafvub8i  于 2022-12-03  发布在  Docker
关注(0)|答案(1)|浏览(171)

我有一个在Docker容器中运行的React/Flask应用程序。我使用docker-compose构建项目并在容器中运行应用程序本身没有问题。我遇到的问题是一个特定的API路由,它应该从DB中获取用户配置文件,加密文本文件中的值,并返回到前端进行下载。加密脚本是用C编写的,尽管API路由是用Python编写的。当我尝试通过Docker中运行的应用程序进行加密时,我得到了以下错误消息:

操作系统错误:[错误号8]执行格式错误:'./应用程序/加密/加密. exe'

我知道如果在Docker容器外部调用以下命令,则该命令在CLI中有效(仍然在与应用程序中相同的目录级别调用):

./app/Crypto/encrypt.exe -k ./app/Crypto/secretkey -i ./profile.txt -o ./profile.encr

我使用下面的Python代码调用API路径中的命令,这是它失败的地方:

proc = subprocess.Popen(f"./app/Crypto/encrypt.exe -k ./app/Crypto/secretkey -i ./{profile.profile_name}.txt -o ./{profile.profile_name}.encr", shell=True)

我的后端的Dockerfile粘贴在下面:

FROM python:3

WORKDIR /app

ENV FLASK_APP=main.py

COPY ./requirements.txt .

RUN pip install -r requirements.txt

COPY . .

CMD ["python", "main.py"]

我尝试用几种不同的方法来解决这个问题:

  • 默认情况下,我的Docker容器是用ARM 64的架构构建的。我读到操作系统错误是由架构不是AMD 64引起的,所以我用AMD 64重建了容器,它给了我同样的错误。
  • 如果这是一个权限错误,我在构建容器时通过Dockerfile在encrypt.exe上运行了chmod +rwx。非常肯定它与权限无关,尤其是它仍然失败。
  • 我在脚本和Dockerfile中添加了一个shebang(#!/bin/bash)。

在一天结束的时候,我知道我在使用subprocess.Popen时失败了,所以我肯定我在使用Python调用脚本时一定遗漏了什么,或者我的Docker Container中有一个配置阻止了这个功能。我的机器是Macbook Pro,脚本在上面运行得很好。脚本也成功地在运行Linux的机器上使用。
任何机会的人已经看到类似的问题出现了这个错误?提前感谢!

fnx2tebb

fnx2tebb1#

因此,由于大卫对此的评论,我遵循了这样一条线索,即我想要运行的可执行文件可能需要在Dockerfile中构建。我销毁了原来的容器,添加了一个步骤来运行生成可执行文件的Makefile,最后通过Docker容器中运行的应用程序运行程序。这就成功了!不确定为什么需要在Docker容器中编译可执行文件,但在Dockerfile中的Makefile上运行“make”就成功了。

相关问题