Docker容器无长驻进程自动退出,无法外部调用执行pytest测试
可行解决方案
核心问题是容器默认执行完预设的pytest命令后没有运行中的前台进程,会直接退出,以下两种方案都可以满足需求:
方案一:调整配置让pytest容器常驻后台(适合频繁手动执行测试场景)
第一步:修改Dockerfile
将末尾的默认CMD替换为阻塞式空命令,让容器启动后保持运行:
FROM python:3.9.0-alpine RUN apk add tk COPY requirements.txt requirements.txt RUN pip install -r requirements.txt RUN ls .. # 替换原有pytest命令,用阻塞命令保持容器运行 CMD ["tail", "-f", "/dev/null"]
第二步:启动容器
执行以下命令后台启动服务:docker compose up -d pytest
第三步:按需执行测试
需要运行测试时,直接调用容器内的pytest即可,测试参数可自定义:docker compose exec pytest pytest --junitxml ../r/latest.xml
方案二:不常驻容器,单次执行(适合CI/单次测试场景,无需修改原有配置)
不需要修改Dockerfile和docker-compose.yml,每次执行测试时直接覆盖容器默认命令即可,执行完成后容器自动销毁:docker compose run --rm pytest pytest --junitxml ../r/latest.xml
补充说明
如果不想修改原有Dockerfile的默认CMD,又需要临时启动常驻容器,可在启动时直接覆盖命令:docker compose run -d --name pytest pytest tail -f /dev/null
后续执行测试的逻辑和方案一一致。
内容的提问来源于stack exchange,提问作者Blue Sky
相关产品推荐
相关产品推荐

