docker compose up——当测试中的系统快速崩溃时,退出代码无错误地从退出中退出

docker compose up——当测试中的系统快速崩溃时,退出代码无错误地从退出中退出,docker,docker-compose,Docker,Docker Compose,我正在使用docker compose为我的docker图像创建一些集成测试docker compose有一个整洁的标志--exit code from,允许在测试完成后停止所有docker并从测试docker返回退出代码 但问题是,--退出代码从自动包括标志--在容器退出时中止。这是非常合乎逻辑的,但会产生以下问题: 正常情况 FROM alpine as development ENTRYPOINT [ "/bin/false" ] FROM alpine as test ENTRYPOI

我正在使用
docker compose
为我的docker图像创建一些集成测试
docker compose
有一个整洁的标志
--exit code from
,允许在测试完成后停止所有docker并从测试docker返回退出代码

但问题是,
--退出代码从
自动包括标志
--在容器退出时中止
。这是非常合乎逻辑的,但会产生以下问题:

正常情况

FROM alpine as development
ENTRYPOINT [ "/bin/false" ]

FROM alpine as test
ENTRYPOINT [ "/bin/sleep", "3" ]
  • 正在测试的系统启动
  • 集成测试运行测试并退出,错误代码为X
  • 所有集装箱均已停止
  • 返回退出代码X
  • 问题案例

    FROM alpine as development
    ENTRYPOINT [ "/bin/false" ]
    
    FROM alpine as test
    ENTRYPOINT [ "/bin/sleep", "3" ]
    
  • 正在测试的系统启动
  • 在集成测试有时间完成之前,被测系统将带着错误退出
  • 所有集装箱均已停止
  • 返回退出代码0!因此,测试似乎成功了
  • 您可以使用以下文件复制此文件:

    Dockerfile

    FROM alpine as development
    ENTRYPOINT [ "/bin/false" ]
    
    FROM alpine as test
    ENTRYPOINT [ "/bin/sleep", "3" ]
    
    docker compose.yml

    version: "3.5"
    services:
      sut:
        build:
          context: .
          target: development
      test:
        build:
          context: .
          target: test
    
    然后跑

    docker-compose up --build --exit-code-from test
    echo $? # print exit code from previous command
    
    将返回退出代码0

    我希望退出代码0的意思是:集成测试确实运行并且成功。

    编辑:
    在看到这个问题合并到
    docker compose
    1.22.0之后;我再次使用最新版本的docker compose(目前为1.24.1)运行,但仍然遇到了问题。

    这是迄今为止我找到的唯一解决方法。虽然不是最干净的解决方案,但它确实做到了:

    docker-compose up --build --exit-code-from test | grep -q "_test_1 exited with code 0" $TMP
    

    一个带有选项解析的干净bash脚本中的较长版本,显示docker compose的输出:

    我得到了docker-test_sut_1,代码1退出了我得到了docker compose版本1.23.2、docker py版本:3.6.0和docker
    版本:18.09.2
    确实是,但退出代码是0。在该命令之后运行
    echo$?
    ,该命令将打印退出代码。是的,确定,docker运行到底,没有错误,docker中的测试是nottest\u sut\u 1=测试docker下的系统,而不是测试docker。在测试完成之前,正在测试的系统错误退出。docker compose以退出代码0结束。。。这就是我现在所期望的,如果我运行测试。。。我想知道我的码头工人是否能胜任,但事实显然并非如此!