当前位置: 首页 > 知识库问答 >
问题:

脚本在生成时失败,但可从Docker容器中工作

宋稳
2023-03-14

我试图通过Docker运行一个目录监视器的单元测试,它对文件和目录的创建、移动和重命名做出反应。

以下是脚本:

#/bin/bash

# Launch Redis server
redis-server --daemonize yes
# Start directory_observer
python /test/directory_observer/src/directory_observer.py --config=/test/directory_observer/tests/directory_observer.ini &
# Execute test script (operations in the folders)
bash /test/directory_observer/tests/Dockerfile_testing/directory_observer_test_cases.sh
# Run Python unit test based on the operations executed above
python /test/directory_observer/tests/Dockerfile_testing/test_directory_observer.py
cd /test/directory_observer/ && nosetests

>

  • redis是监视器注意到的事件存放的地方

    directory\u observer.py是目录监视器

    directory\u observer\u test\u cases.sh只是一个bash脚本,用于创建、重命名和移动一些文件和目录。

    test\u directory\u observer.py只是一个Python单元测试脚本(在这里运行是为了调试)

    问题是,有些测试在构建时没有任何明显的原因就失败了,但是如果我从运行的容器中尝试完全相同的bash指令,它就会按预期工作。

    如果您需要目录\u observer\u test\u cases.sh的代码

    #!/bin/bash
    
    cd /test/monitored1
    
    # Create, rename and delete file
    touch file1
    mv file1 rename1
    
    # Same as above, but in a sub-directory
    mkdir sub-monitored
    cd /test/monitored1/sub-monitored
    touch file2
    mv file2 rename2
    
    cd /test/monitored2
    
    # Create, rename and delete file to test second monitored dir
    touch file12
    mv file12 rename12
    
    
    ### NOT MONITORED FROM HERE ###
    
    
    # Rename the monitored directory
    cd /test
    mv monitored1 watched1
    
    # Same as #1, but in the newly renamed directory
    cd /test/watched1
    touch file3
    mv file3 rename3
    
    # Move the second monitored directory
    cd /test
    mv monitored2 directory_host
    
    # Same as #1, but in the newly moved directory
    cd /test/directory_host/monitored2
    touch file4
    mv file4 rename4
    
    # Operations in the non-monitored directory
    cd /test/ingored.t
    touch file5
    mv file5 rename5
    

    在你问之前,是的,我读过这个问题,但它对我没有帮助(或者我错过了什么)。

  • 共有1个答案

    令狐宜民
    2023-03-14

    事实证明,由于目录监视器是作为后台进程启动的,所以测试脚本在监视器初始化之前启动。因此,一些事件被遗漏,测试失败。

    在启动测试脚本之前添加一个sleep 1,解决了问题,现在一切都运行顺利。

     类似资料:
    • 问题内容: 命令 : 下面的Dockerfile: 在最后一行失败(./configure …) 如果我删除了最后一行并在容器中运行了bash,然后手动执行了最后一行,那么它将起作用。 我希望将命令添加到Dockerfile中(由RUN前缀)后,在容器中成功运行的任何命令都应该起作用 我错过了什么吗? 问题答案: pwd在RUN命令中不是持久的。您需要在同一RUN中进行cd和配置。 这个Docke

    • 我在学docker。我尝试在docker,com上运行一个示例dockerfile。但我有一个问题是“来自守护进程的错误响应:OCI运行时创建失败:container\u linux.go:345:启动容器进程导致”exec:\“flask\”:在$PATH中找不到可执行文件“:未知”。 非常感谢。

    • 问题内容: 我正在尝试创建用于设置Docker容器的Shell脚本。我的脚本文件如下所示: 运行此脚本文件将在新调用的bash中运行容器。 现在,我需要运行一个脚本文件(test.sh),该文件已经位于上述给定的shell脚本的容器内(例如:cd /path/to/test.sh && ./test.sh),该怎么做? 问题答案: 您可以使用以下命令在正在运行的容器中运行命令: 并从bash会话运

    • 我已经容器化了一个Spring引导应用程序。它包含在一个jar文件中。当我单独调用jar文件时,它正在工作,但是当我通过运行它时,它会产生以下错误: ConfigServletWebServerApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂UnsatisfiedPendencyException:创建名为“crawle