首页 > 解决方案 > 完成测试过程后,Docker Pytest 容器保持运行

问题描述

我已经设置了我的 django 项目,现在我正在尝试使用 pytest 对其进行测试。使用我的容器运行 pytest 有什么问题不会在进程结束时杀死它。所以在一天结束时,我遇到了来自 pytest 的多个正在运行的容器,并且经常遇到 postgreSql 连接问题。

我的码头工人撰写文件:

version: '3'
services:
    license_server:
        build: .
        command: bash -c "python manage.py migrate && gunicorn LicenseServer.wsgi --reload --bind 0.0.0.0:8000"
        depends_on:
            - postgres
        volumes:
            - .:/code
        environment:
            DATABASE_NAME: "${DATABASE_NAME}"
            DATABASE_USER: "${DATABASE_USER}"
            DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
            DATABASE_PORT: "${DATABASE_PORT}"
            DATABASE_HOST: "${DATABASE_HOST}"
        env_file: .env
        ports:
            - "8000:8000"
        restart: always
    postgres:
        build: ./postgres
        volumes:
          - ./postgres/postgres_data:/var/lib/postgresql/data/
        environment:
            POSTGRES_PASSWORD: postgres
            DATABASE_NAME: "${DATABASE_NAME}"
            DATABASE_USER: "${DATABASE_USER}"
            DATABASE_PASSWORD: "${DATABASE_PASSWORD}"
            DATABASE_PORT: "${DATABASE_PORT}"
            DATABASE_HOST: "${DATABASE_HOST}"
        command: "-p 8005"
        env_file: .env
        ports:
           - "127.0.0.1:8005:8005"
        restart: always
    nginx:
      image: nginx:latest
      container_name: nginx1
      ports:
        - "8001:80"
      volumes:
        - .:/code
        - ./config/nginx:/etc/nginx/conf.d
      depends_on:
        - license_server

我想要实现的是在测试过程完成后自动关闭容器。

在此处输入图像描述

标签: pythondjangodockerdocker-composepytest

解决方案


当您拥有restart: always它们时,它们只会在该命令产生的所有进程都退出时继续重新启动。即使您尝试自己杀死正在运行的容器,它们也会倾向于重新启动(这可能很麻烦)。尝试restart: always从您的服务描述中删除。

有关更多信息,请查看docker-compose.yml 参考


推荐阅读