BrowserstackLocal.stop() зависает в контейнере Docker

У меня есть тесты Selenium Java, работающие внутри контейнера Docker. Мне нужно использовать BrowserStackLocal, потому что я использую прокси-сервер BrowserMob для перехвата и проверки аналитики, отправленной нашим веб-приложением. Каждый раз, когда внутри 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(). Есть ли обходной путь, который может помочь?


person Nick Slavsky    schedule 11.05.2018    source источник


Ответы (1)


Вполне вероятно, что проблема связана с --init(https://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem).

Возможным решением в этом случае будет использование tini (https://github.com/krallin/tini ). Тини (обычно называемый крошечным init) позаботится о жатве дочернего процесса.

Вот рабочий пример файла докера для запуска Tini внутри докера, который должен решить вашу проблему:

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 в соответствии с вашими требованиями.

person BountyHunter    schedule 14.05.2018
comment
Спасибо! Сейчас выполняются некоторые проверки... Я получаю это предупреждение. Tini не работает как PID 1 и не зарегистрирован как дочерний поджатник... Вы уверены, что вам не нужно добавлять -s к точке входа? - person Nick Slavsky; 14.05.2018
comment
Я переопределяю точку входа, так как использую собственный образ докера. Вы можете обновить его или оставить по умолчанию - person BountyHunter; 14.05.2018