使用 Miniconda 在 Docker 上运行 Python Flask API 并在本地主机上访问它的正确方法是什么?

问题描述 投票:0回答:1

如何访问本地主机 Docker 容器上运行的 Flask API?

我使用 Flask API 创建了 miniconda docker 镜像。

Dockerfile 是:

FROM continuumio/miniconda3

# Install base utilities
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*

COPY api /root/api
RUN echo "Running $(conda --version)" 
RUN conda update conda 
RUN conda create -n api python=3.9 
RUN echo "conda activate api" >> ~/.bashrc
SHELL ["/bin/bash", "--login", "-c"]
RUN conda activate api
RUN conda install flask requests 
ENTRYPOINT ["conda", "run", "-n", "api", "python", "/root/api/main.py"]

Flask API 使用端口 5000。我尝试将

EXPOSE 5000
添加到 dockerfile,但没有发现任何差异。

它构建没有错误,但我仍然不确定一切是否正确。所以我在我的电脑上本地运行它来测试。但我无法访问它。我测试了

http://172.17.0.2/api
http://localhost/api
,但没有反应。我还尝试在容器终端中运行
main.py
,但它显示“端口 5000 正在被另一个程序使用”。

所以我想问的是:

  1. 如何在Linux上正确运行Flask API?我这样做对吗?
  2. 如何在Docker中正确运行Flask API?我这样做对吗?
  3. 如何访问本地 Docker 容器(同一台 PC)上运行的 Flask API?我只是无法理解我的 API 获取的 IP/地址。
python docker flask miniconda
1个回答
0
投票

这是我找到的最佳解决方案。

Dockerfile:

FROM tensorflow/tensorflow:2.12.0-gpu

# Install dependencies
RUN pip install tensorflow-hub <whatever else you need>

# Copy application code
COPY /my-app-code /app
WORKDIR /app

# Expose port 5000 for Flask
EXPOSE 5000

# Set entrypoint
ENTRYPOINT ["python", "main.py"]

在带有 Flask 应用程序的 .py 中,您应该这样运行您的应用程序:

app.run(host="0.0.0.0", port="5000")

我使用tensorflow图像,因为否则我会错过nvidia驱动程序并且容器将看不到GPU。我不使用 nvidia 容器,因为这可能与我正在使用的 Tensorflow 版本存在版本冲突。

我不得不放弃 miniconda,因为它带来了很多复杂性。但是可以在其上运行 Flask API。这是工作的 dockerfile:

FROM continuumio/miniconda3

# Install base utilities
RUN apt-get update \
&& apt-get install -y wget \
&& rm -rf /var/lib/apt/lists/*

# flask app code is in "my-app-code" folder near with dockerfile
COPY /my-app-code /app
RUN echo "Running $(conda --version)" 
RUN conda update conda 
RUN conda create -n app-env python=3.9 
RUN echo "conda activate app-env" >> ~/.bashrc
SHELL ["/bin/bash", "--login", "-c"]
RUN conda activate app-env
RUN conda install flask requests 
EXPOSE 5000
ENTRYPOINT ["conda", "run", "-n", "app-env", "python", "/app/main.py"]

不要忘记将主机和端口添加到您的

app.run
,如上所示。

© www.soinside.com 2019 - 2024. All rights reserved.