首页 > 解决方案 > 在 Dockerfile 上设置环境变量,烧瓶服务器不起作用

问题描述

我需要在我的 Dockerfile 中设置环境(我不能使用 docker-compose,因为我需要这个 dockerfile 用于 kubernetes)。这是我的 Dockerfile:

FROM tensorflow/tensorflow:2.1.0-py3

RUN apt -qq -y update \
    && apt -qq -y upgrade

WORKDIR /socialworks-api
COPY . /socialworks-api

RUN python -m pip install --upgrade pip

RUN apt -y install git

#for mysql
RUN apt install -y libmysqlclient-dev

RUN pip --no-cache-dir install -r requirements.txt
EXPOSE 5000
CMD ["/bin/bash", "./start.sh"]

这是我的 start.sh 文件:

#!/bin/bash
export $(grep -v '^#' env/docker.env | xargs)
source env/docker.env
python app.py

这是我在 app.py 中启动烧瓶服务器的地方:

if __name__ == '__main__':
    print("test")
    socketio.run(app, host="0.0.0.0", debug=True, use_reloader=False)

问题是,在这些命令之后,我尝试运行我的 docker 容器并且正在启动烧瓶服务器(它甚至在终端中打印测试)并且当我尝试运行http://0.0.0.0:5000/我有浏览器无法连接问题。也许问题出在我的 dockerfile 或 start.sh 文件中的 CMD 上?我是 Docker 新手。任何帮助将不胜感激。本地一切正常。这是我用来运行 docker 容器的命令:

docker run -it flaskapp

这是码头工人ps:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
337f1bdacb3e        flaskapp            "/bin/bash ./start.sh"   44 seconds ago      Up 42 seconds       5000/tcp            dazzling_mcclintock

以下是日志:

docker logs 337f1bdacb3e
[nltk_data] Downloading package punkt to /root/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.
2020-04-20 10:02:44.287504: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-04-20 10:02:44.309581: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2394225000 Hz
2020-04-20 10:02:44.310031: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x4971910 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-04-20 10:02:44.310068: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
test
(10) wsgi starting up on http://0.0.0.0:5000

日志与我在本地运行时得到的相同,并且在本地一切正常。可能是烧瓶应用程序在运行时以某种方式停止了吗?

标签: python-3.xdockerflaskdockerfile

解决方案


问题似乎在于您尚未将 docker 容器的公开端口映射到本地计算机。要解决此问题,您需要将运行更改为命令

docker run -it -p 5000:5000 flaskapp.

这告诉 docker 将正在运行的容器(第一个 5000)中的端口 5000 映射到本地计算机上的端口 5000(第二个 5000)[例如,如果您想在本地计算机端口 8080 上运行它,那么标志将是-p 5000:8080]。

当你这样做时,端口部分的输出docker ps应该类似于:

0.0.0.0:5000->5000/tcp


推荐阅读