【问题标题】:Cannot run Python Docker containers on Apple M1 / macOS Monterrey 12.4无法在 Apple M1 / macOS Monterrey 12.4 上运行 Python Docker 容器
【发布时间】:2022-06-16 14:50:20
【问题描述】:

现在我无法在 M1 Macbook 上的 Docker 容器中运行 Python Flask。我使用的是 macOS Monterrey 12.4,但问题已经出现在 12.3 上。我的 Flask 应用非常基础:

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

if __name__ == '__main__':
    app.run(port='5000')

我的 Dockerfile 也是如此:

FROM arm64v8/python:latest

RUN mkdir /templates

COPY templates/* ./templates

COPY requirements.txt app.py ./

RUN pip3 install -r requirements.txt

CMD [ "python3", "-m" , "flask", "run"]

我在我的 repo 中运行以下 Docker 命令:

docker build -t quick-test .

docker run -d -p 5000:5000 quick-test

当我访问我的 localhost:5000 时,我的浏览器中出现了 ERR_EMPTY_RESPONSE。这种情况一次又一次地发生,在其他 Flask 应用程序中也是如此。我查看了我的端口,这是唯一运行在 5000 的端口。

还尝试安装带有 Rosetta 2 的 Intel Docker Desktop,但无济于事。我尝试的其他事情是将 Docker 映像更改为 ARM64 架构(没有改变任何东西),并在与我的不同的 M1 Mac 上运行它(产生相同的结果)。

当我在另一台 M1 Mac 上测试它时,我意识到这是 Docker 的 M1 问题。但可以吗?有什么路线吗?

【问题讨论】:

  • 此版本的 Macbook 使用端口 5000。您是否尝试在其他端口上运行 Docker 容器? docker run -d -p 5001:5000 quick-test?
  • 是的,我做到了。先上 8080,再上 5001 和一些 5000 以上的随机端口。没用。

标签: python docker flask apple-m1


【解决方案1】:

mac 上的 5000 端口可以被控制中心使用,它可能会对您的本地开发造成严重破坏。我更改了配置的端口并暴露了相同的端口和 docker,它可以正常工作

Dockerfile

FROM arm64v8/python:latest

COPY requirements.txt app.py ./

RUN pip3 install -r requirements.txt

EXPOSE 8050

CMD [ "python3", "-m" , "flask", "run", "--host" ,"0.0.0.0", "--port", "8050"]

现在转到 localhost:8050/

【讨论】:

    猜你喜欢
    • 2023-01-08
    • 2022-07-19
    • 2018-02-27
    • 2022-07-02
    • 2022-07-28
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多