当前位置: 首页 > 知识库问答 >
问题:

将Python解释器设置为Docker

臧友樵
2023-03-14

我已经设置了一个PythonFlask项目,指向运行在Docker中的解释器

PyCharm IDE启动Flask应用程序将产生以下输出:

51be5e336622:python3 -u /opt/project/app.py
Starting server
 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 * Restarting with stat
Starting server
 * Debugger is active!
 * Debugger PIN: 328-461-278

试图打开http://localhost:5000/ 导致页面未找到错误。

如果我使用Docker与Dockerfile运行应用程序

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 5000

#CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

CMD [ "python3", "-u" , "/app/app.py"]

上述Dockerfile构建PyCharm连接的容器,并在PyCharm中配置为:

使用命令Docker run-p 5000:5000 services运行Docker容器,应用程序在上启动http://localhost:5000/ 成功地

我是否需要将端口5000从PyCharm IDE映射到在端口5000上运行的Docker容器?如何实现这一点,PyIDE中似乎没有一个选项?


共有1个答案

郎建章
2023-03-14

在https://blog.jetbrains.com/pycharm/2017/03/docker-compose-getting-flask-up-and-running/的帮助下,这正在发挥作用。

Dockerfile:

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 5000

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

app.py主要方法:

if __name__ == '__main__':

    for handler in logging.root.handlers[:]:
        logging.root.removeHandler(handler)

    logging.basicConfig(level=logging.INFO,
                        filename='./logs/' + str(
                            int(round(time.time() * 1000))) +'trade.log',
                        filemode="a+",
                        format="%(asctime)-15s %(levelname)-8s %(message)s",
                        datefmt='%Y-%m-%d %H:%M:%S')
    logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))

    print('Starting server')
    app.run(host="0.0.0.0", port=5000, debug=True)

docker-compose.yml,注意端口5000的使用:

version: '2'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/app

开始docker撰写:

docker-compose up

更新PyCharm以使用docker comment实例:

app.py中执行main的输出:

Attaching to ml-services_web_1
web_1  | Starting server
web_1  |  * Serving Flask app "app" (lazy loading)
web_1  |  * Environment: production
web_1  |    WARNING: This is a development server. Do not use it in a production deployment.
web_1  |    Use a production WSGI server instead.
web_1  |  * Debug mode: on
web_1  |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1  |  * Restarting with stat
web_1  | Starting server
web_1  |  * Debugger is active!
web_1  |  * Debugger PIN: 828-722-345
web_1  | 172.20.0.1 - - [06/Apr/2021 13:36:32] "GET / HTTP/1.1" 200 -

http://localhost:5000/ 现在可以访问。

 类似资料:
  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站下载并安装好

  • 当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。 由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。 CPython 当我们从Python官方网站下载并安装好

  • 本文向大家介绍MAC中PyCharm设置python3解释器,包括了MAC中PyCharm设置python3解释器的使用技巧和注意事项,需要的朋友参考一下 MAC上的PyCharm中默认的python解释器是python2的,windows下的没用过不是很清楚,所以特来记录下设置python3解释器的过程。 python3的查找与安装 如果电脑中没有安装python3可以用brewhome来安装,

  • 2. Python 解释器 2.1 调用解释器 在可用的机器上,Python解释器通常安装成/usr/local/bin/python;请将/usr/local/bin放在您的Unix shell搜索路径,以使得可以通过在shell中键入命令 python 来启动它。由于解释器放置的目录是一个安装选项,其它地方也是可能的;请与您本地的Python专家或系统管理员联系。(例如,/usr/local

  • 我目前正在Xubuntu Linux 3.19上进行一个开源Python项目。0-51-使用Pycharm的通用x86_64。尽管我的项目需要Python3.4或更高版本,但IDE似乎强制项目使用Python2.7。我试图从项目解释器菜单中更改解释器(参见屏幕截图),甚至从项目解释器菜单中删除了Python 2.7条目。。都没有用。我附上了项目解释器菜单的屏幕截图,下面是我的调试器会话的第一行,以

  • Python的状态(版本 3 和版本 2) 选择 Python 解释器时,总会出现一个令人窘迫的问题:“我应该选择Python 2 还是 Python 3”? 答案比人们想象的要复杂的多。 大致的基本情况如下: 今天大多数生产应用程序都在使用 Python 2.7。 Python 3 已经可以在今天的应用程序上生产部署。 Python 2.7 只会在 2020 年之前获得必要的安全更新[[6]](