【问题标题】:how to make Docker-compose run all services when debuging with Pycharm?使用 Pycharm 调试时如何让 Docker-compose 运行所有服务?
【发布时间】:2019-01-05 14:52:38
【问题描述】:

我有一个简单的 dockerized Django gunicorn、nginx 和 postgress 项目(每个都是一个服务)。

当我使用 docker-compose up 运行它时,一切正常:

maximd@ubuntu ~/PycharmProjects/MyQ (master) $ docker-compose ps

     Name                    Command               State          Ports        
-------------------------------------------------------------------------------
myq_database1_1   docker-entrypoint.sh postgres    Up      5432/tcp            
myq_djangoapp_1   /bin/sh -c gunicorn --bind ...   Up      8000/tcp            
myq_nginx_1       nginx -g daemon off;             Up      0.0.0.0:8000->80/tcp

但是,当我使用 pycharm 调试器午餐时,它不会运行 nginx。

我怀疑由于 djangoapp 依赖于我的 docker-compose.yml 文件中的数据库服务,它只是创建了它们,但它不运行 nginx。

这是我在调试器中使用 pycharm 运行它后看到的:

maximd@ubuntu ~/PycharmProjects/MyQ (master) $ docker-compose ps
     Name                    Command               State                  Ports               
----------------------------------------------------------------------------------------------
myq_database1_1   docker-entrypoint.sh postgres    Up       5432/tcp                          
myq_djangoapp_1   python -u /opt/.pycharm_he ...   Up       0.0.0.0:55488->55488/tcp, 8000/tcp
myq_nginx_1       nginx -g daemon off;             Exit 0                                     

所以,我的问题是:有没有办法让 nginx 也成为 djangoapp 的依赖项?有没有办法让 pycharm 运行所有服务,而不仅仅是我要调试的服务?

这是我的 docker-compose.yml 文件:

version: '3'

services:

  djangoapp:
    build: .
    volumes:
      - .:/services/djangoapp
      - static_volume:/services/djangoapp/static
      - media_volume:/services/djangoapp/media
    networks:
      - nginx_network
      - database1_network
    depends_on:
      - database1

  nginx:
    image: nginx:1.13
    ports:
      - 8000:80
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - static_volume:/services/djangoapp/static
      - media_volume:/services/djangoapp/media
    depends_on:
      - djangoapp
    networks:
      - nginx_network

  database1:  # <-- IMPORTANT: same name as in DATABASES setting, otherwise Django won't find the database!
    image: postgres:10
    env_file:
      - config/db/database1_env
    networks:
      - database1_network
    volumes:
      - database1_volume:/var/lib/postgresql/data

networks:
  nginx_network:
    driver: bridge
  database1_network:
    driver: bridge

volumes:
  database1_volume:
  static_volume:
  media_volume:

这是我在图片中的调试配置和解释器配置。

【问题讨论】:

  • 您是否尝试将Service 部分空白留在配置中?
  • @pawamoy,其实我想想,那不,我今天下班后试试。
  • 我尝试了其他一些可能相关的事情:在调试配置中:仅单实例复选框,选中和未选中,两者都没有做任何事情。在调试配置中:将工作目录设置为:/services/djangoapp(docker容器中的项目根目录)也没有做任何事情
  • 我真的认为将 Service 留空将解决您的问题。如果指定djangoapp服务,则不会启动nginx容器。但实际上这可能不是问题,因为在本地/开发/调试中您不需要 nginx:gunicorn 就足够了。也许尝试在你的 docker-compose 中为 djangoapp 服务绑定- ports: 8000:8000
  • @pawamoy 我昨天尝试了你的建议,pycharm 不允许将服务留空,因为它试图在服务中定位 python 解释器。

标签: docker nginx docker-compose pycharm


【解决方案1】:

终于解决了,解决方法是将docker-compose.yml改成这个:

version: '3'

services:

  djangoapp:
    build: .
    restart: always
    volumes:
      - .:/services/djangoapp
      - static_volume:/services/djangoapp/static
      - media_volume:/services/djangoapp/media
    networks:
      - nginx_network
      - database1_network
    depends_on:
      - database1
      - nginx

  nginx:
    image: nginx:1.13
    restart: always
    ports:
      - 8000:80
    volumes:
      - ./config/nginx/conf.d:/etc/nginx/conf.d
      - static_volume:/services/djangoapp/static
      - media_volume:/services/djangoapp/media
    networks:
      - nginx_network

  database1:  # <-- IMPORTANT: same name as in DATABASES setting, otherwise Django won't find the database!
    image: postgres:10
    env_file:
      - config/db/database1_env
    networks:
      - database1_network
    volumes:
      - database1_volume:/var/lib/postgresql/data

networks:
  nginx_network:
    driver: bridge
  database1_network:
    driver: bridge

volumes:
  database1_volume:
  static_volume:
  media_volume:

基本上让djangoapp依赖于nginx,并在nginx和djangoapp中添加restart:always。

也在运行/调试配置窗口中:

主机是:0.0.0.0

工作目录:/services/djangoapp(就像djangoapp里面的那个)

路径映射:/home/maximd/PycharmProjects/MyQ=/services/djangoapp

【讨论】:

    【解决方案2】:

    我怀疑你的 nginx 容器自己崩溃了,看看docker logs myq_nginx_1

    【讨论】:

    • docker logs myq_nginx_1 返回了一些日志,但时间表明这些日志都来自 docker-compose up 命令,没有与 django 调试器运行相关的时间
    猜你喜欢
    • 2018-08-29
    • 2020-07-22
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多