如何访问本地主机 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 正在被另一个程序使用”。
所以我想问的是:
这是我找到的最佳解决方案。
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
,如上所示。