在 docker 内部运行 python 测试并在主机外部获取退出代码

Rah*_*eel 6 python teamcity continuous-integration docker docker-compose

我有这个 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'"
Run Code Online (Sandbox Code Playgroud)

我有以下 Makefile

test:
    cp config/config-$(env).cfg config/config.cfg
    docker-compose -f environment/test.yml up --build 
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

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

atl*_*ine 2

在后台运行容器:

docker run -dit abc-python-test somecommand
Run Code Online (Sandbox Code Playgroud)

然后您可以使用

docker wait abc-python-test
Run Code Online (Sandbox Code Playgroud)

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

详细参考官方指南