BrowserstackLocal.stop()挂起Docker容器

时间:2018-05-11 21:18:13

标签: java docker browserstack

我在Docker容器中运行了Selenium Java测试。我需要使用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()调用。 是否有可能有用的解决方法?

1 个答案:

答案 0 :(得分: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)将负责收获子进程。

这是一个用于在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命令