Pycharm专业版可以配置SSH Remote连接远端服务器并在远端服务器上调试程序(搜索SSH Interpreter会有很多教程)。但如果我们想在本地电脑上通过Pycharm运行Docker容器并在Pycharm中使用debug方式启动Flask服务脚本(如start_server.py),在使用Postman请求容器内服务接口的时候,可以通过在Pycharm打断点的方式查看各个环节的状态。应该怎么实现呢?

准备
  1. 以Macbook环境为例,需要安装docker desktop并启动docker
  2. 需要有一个支持程序运行环境的Docker镜像(如果本地没镜像需要先docker pull xxx),其中包含运行服务所需的Python包
  3. Pycharm专业版(其他非专业版未测试)
  4. 服务代码
Pycharm配置
  • 新增python interpreter
    左上角Pycharm -> Settings ->Project: xxx -> Python Interpreter ->点击小齿轮⚙ -> Add
    在这里插入图片描述
  • 选择docker 或docker compose,本处以docker compose为例
    在这里插入图片描述
    Server指Docker程序,如果本地运行docker了,点击New可以自动连接;
    在这里插入图片描述
    Configuration files就是需要的docker compose文件(通常是yml类型的文件),需要对docker compose启动方式有所了解。配置可以是相对路径;
    Service是compose文件中配置的服务名,编辑好compose文件后可以在下拉菜单中选择。
  • 点击OK即可完成远程python解释器环境配置(过程可能会持续3-5min)
  • compose文件参考示例如下:
version: '3.10'
services:
  flask:
    image: {打包好的服务镜像名}  # 一般需要通过Dockerfile运行docker build命令打包镜像
    ports:
      - "15000:5000"  # 容器中服务启动端口是5000(在Dokerfile中说明),容器对外(macbook)暴露端口是15000
    environment:  # 定义环境变量
      OPEN_API_KEY: "my_api_key"
    # command: ["sh", "-c", "cd /app&& python3 start_api.py"]  注意要注释掉默认的启动命令,
    # 否则在容器启动的时候会自动运行服务

dockerfile参考示例

FROM {python 基础镜像包}

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt -i 

COPY ./app /app


EXPOSE 5000

CMD ["sh", "-c", "tail -f /dev/null"]

Dockerfile中最后运行的命令表示容器在sh命令行pending住

  • 配置服务启动脚本
    点击Edit Configurations
    在这里插入图片描述
    配置python远端解释器,配置启动脚本路径,配置工作目录;在这里插入图片描述
    Path mappings需要设置本地app路径和容器内app路径(图中未设置,请注意增加)如/Users/q/Documents/app=/app ;
    点击“OK”既可以通过debug模式运行start_api.py脚本并在程序代码中打断点,postman访问 “http://127.0.0.1:15000”即可请求服务接口

更多推荐