ERR_PROXY_CONNECTION_FAILED при запуске автотестов из jenkins docker контейнера с browsermob proxy
Пытаюсь запустить автотесты, использующие browsermob proxy, из jenkins контейнера с использованием selenoid контейнера. Если запускаю на локальной машине, то всё проходит идеально. Если запускаю из контейнера jenkins, то падает с ошибкой. Использую selenoid, selenide и java 8 (последнее обновление), всё это под testng и gradle
org.openqa.selenium.WebDriverException: unknown error: net::ERR_PROXY_CONNECTION_FAILED
(Session info: chrome=87.0.4280.66)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: '1ab7581800a1', ip: '172.17.0.4', os.name: 'Linux', os.arch: 'amd64', os.version: '4.19.128-microsoft-standard', java.version: '1.8.0_282'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
selenide.url: http://xxx.xx.xxx.xx:3015/youtube-downloader-2conv?utm_source=2conv&utm_campaign=testprod
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 87.0.4280.66, chrome: {chromedriverVersion: 87.0.4280.20 (c99e81631faa0..., userDataDir: /tmp/.com.google.Chrome.n8IeC0}, goog:chromeOptions: {debuggerAddress: localhost:36623}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, proxy: Proxy(manual, http=jenkins:..., setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
selenide.baseUrl: http://localhost:8080
Session ID: 072673d92c31064be6b52ebf22774dd8
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:277)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteNavigation.to(RemoteWebDriver.java:857)
at com.codeborne.selenide.drivercommands.Navigator.lambda$navigateTo$0(Navigator.java:70)
at com.codeborne.selenide.logevents.SelenideLogger.run(SelenideLogger.java:139)
at com.codeborne.selenide.drivercommands.Navigator.navigateTo(Navigator.java:66)
at com.codeborne.selenide.drivercommands.Navigator.open(Navigator.java:30)
at com.codeborne.selenide.SelenideDriver.open(SelenideDriver.java:86)
at com.codeborne.selenide.Selenide.open(Selenide.java:49)
at pageObjects.MainPage.open(MainPage.java:85)
at pageObjects.MainPage.open(MainPage.java:70)
at tests.downloads.TestDownloads.testSimplePage(TestDownloads.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:598)
at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:173)
at org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:77)
at org.testng.internal.TestMethodWithDataProviderMethodWorker.call(TestMethodWithDataProviderMethodWorker.java:15)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Вот так падают все тесты, связанные Proxy. Но при этом тесты, которые с прокси не связаны - не падают, успешно проходят. И опять же, если я делаю это на локальной машине (не через контейнер), успешно пробегают. Docker-compose:
version: '3.7'
services:
jenkins:
image: jenkins/jenkins
privileged: true
network_mode: bridge
links:
- selenoid
user: root
ports:
- 8080:8090
environment:
JENKINS_OPTS : "--httpPort=8090"
container_name: jenkins
volumes:
- d:/Hotger/selenoid_plus/ssh_config:/etc/ssh/ssh_config
- d:/Hotger/selenoid_plus/ssh:/root/.ssh/
- d:/Hotger/jenkins:/var/jenkins_home
- //var/run/docker.sock:/var/run/docker.sock
selenoid:
image: aerokube/selenoid:latest-release
network_mode: bridge
ports:
- 4444:4444
container_name: selenoid
volumes:
- d:/Hotger/selenoid_plus:/etc/selenoid/ # assumed current dir contains browsers.json
- //var/run/docker.sock:/var/run/docker.sock
selenoid-ui:
image: aerokube/selenoid-ui:latest-release
network_mode: bridge
links:
- selenoid
ports:
- 9090:9090
container_name: selenoid_ui
command: ["--selenoid-uri", "http://selenoid:4444", "-listen", ":9090"]
db:
image: postgres:latest
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=user
- POSTGRES_PASSWORD=user
container_name: db
Фрагмент кода, отвечающий за прокси (isCIRunner = true):
public ProxyClass setClient() {
client = ClientUtil.createSeleniumProxy(server);
String host = isCIRunner() ? "jenkins" : getLocalHost();
client.setHttpProxy(host + ":" + server.getPort());
client.setSslProxy(host + ":" + server.getPort());
return this;
}
try {
driver = new RemoteWebDriver(new URL(getRemoteAddress()), capabilities);
} catch (MalformedURLException e) {
driver = null;
e.printStackTrace();
}
private String getRemoteAddress() {
String remoteUrl = isCIRunner() ? "selenoid" : "localhost";
return "http://" + remoteUrl + ":4444/wd/hub";
}
Буду благодарен за любую помощь! Никак не могу сообразить, в чём беда и как её исправить(