【问题标题】:BrowserstackLocal.stop() hangs up the Docker containerBrowserstackLocal.stop() 挂起 Docker 容器
【发布时间】:2018-05-14 13:05:45
【问题描述】:

我的 Selenium Java 测试在 Docker 容器中运行。我需要使用 BrowserStackLocal,因为我使用 BrowserMob 代理来拦截和检查我们的 Web App 发送的分析。每次在 Docker 中调用 BrowserStackLocal.stop() 时,它都会挂起。 当我连接到这个正在运行的容器时,我看到了这个:

# ps -eo pid,ppid,state,cmd | awk '$3=="Z"'
  63     1 Z [BrowserStackLoc] <defunct>

我遇到了 NodeJS 的以下问题,但显然它没有移植到 Java 实现: https://github.com/browserstack/browserstack-local-nodejs/issues/25

我对解决方法很好,但我在我的 Dockerfile 中尝试了以下组合(使用 browserstack-local-nodejs 的类似问题的解决方法)但无济于事:

CMD ["java", "-cp", "target/.jar", "org.testng.TestNG", "testng.xml"]
CMD ["/bin/bash", "-c", "set -e && java -cp .jar org.testng.TestNG testng.xml"]

唯一有效的方法是注释 browserStackLocal.stop() 调用。 有没有可能有帮助的解决方法?

【问题讨论】:

    标签: java docker browserstack


    【解决方案1】:

    这很可能是与 --init(https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem) 相关的问题。

    在这种情况下,可能的解决方案是使用 tini (https://github.com/krallin/tini)。 Tini(通常称为 tiny init)会负责子进程的 reaping。

    这是一个在 docker 中运行 Tini 的工作示例 docker 文件,应该可以解决您的问题:

    FROM node:7.10.0
    
    # Add Tini
    ENV TINI_VERSION v0.14.0
    ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
    RUN chmod +x /tini
    ENTRYPOINT ["/tini", "--"]
    
    WORKDIR /app
    COPY package.json /app
    
    RUN ["npm", "install"]
    
    COPY . /app
    
    CMD ["npm", "test"]
    

    您可以根据需要修改 RUN 和 CMD 命令

    【讨论】:

    • 谢谢!现在运行一些检查...我收到此警告“Tini 未以 PID 1 运行并且未注册为子子收割机...”您确定不需要将 -s 添加到入口点吗?
    • 我正在覆盖入口点,因为我使用的是自定义 docker 映像。您可以更新它或将其保留为默认值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2019-12-15
    • 2020-01-17
    • 2019-05-18
    • 2019-08-27
    • 2021-03-19
    • 1970-01-01
    相关资源
    最近更新 更多