【问题标题】:Run python test inside docker and get the exit code outside on host machine在 docker 内部运行 python 测试并在主机外部获取退出代码
【发布时间】:2019-01-30 13:11:01
【问题描述】:

我有这个 docker compose 文件

version: "2"
services:
    abc_python_test:
        build: "python"
        container_name: "abc-python-test"
        volumes:
            - "../:/abc/"
        working_dir: "/abc"
        command: "sh -c 'python3 -m unittest tests/calculator.py'"

我有以下 Makefile

test:
    cp config/config-$(env).cfg config/config.cfg
    docker-compose -f environment/test.yml up --build 

我在 CI 中的构建步骤之一中运行此 Makefile

问题是,测试运行失败,python3 进程得到了exit code 1。但是,一旦python3 进程完成,容器就会关闭。但我的主机显示status code 0。即使测试失败,这也会导致我的构建通过。

如何将此python3 退出代码转发到我的主进程,以便它知道测试失败。

谢谢

PS:我们有旧的 docker compose 版本,没有 --exit-code-from 标志

【问题讨论】:

  • 那么更新 docker compose 怎么样?
  • 这不是我能控制的。

标签: python docker continuous-integration docker-compose teamcity


【解决方案1】:

在后台运行容器:

docker run -dit abc-python-test somecommand

然后你可以使用

docker wait abc-python-test

如果您确定容器在运行后总是退出,无论测试通过还是失败,这都可以获得容器的返回码。

详情参考offical guide

【讨论】:

  • 如果容器中有测试,那么可以通过替换入口点在同一个 docker 镜像上运行测试,例如docker run --entrypoint "pytest" image_name
猜你喜欢
  • 2014-03-03
  • 2016-01-31
  • 2018-12-10
  • 2019-06-26
  • 2016-11-26
  • 2015-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
相关资源
最近更新 更多