我一直在嘗試獲取我的Junit測試中使用的tomcat服務器(運行在Docker容器中)的url,而不僅僅是localhost。這很重要的原因是我的測試在本地運行良好,但是當我們在也在Docker中運行的jenkins節點上運行時,localhost不起作用。Arquillian Cube和ArquillianResource url
我已配置節點在Docker配置上使用Docker。我需要這個url來使用父Docker機器的IP。奇怪的是,jmx網址似乎可以很好地部署測試戰,但它是單元測試網址本身存在問題。我用ip硬編碼重寫了測試,並且這個工作正常,但事實上devs在這裏想要在本地運行測試時並不是最佳解決方案。
我也嘗試過使用@CubeIp和@DockerUrl或@HostIp,但他們要麼返回只是本地主機或空的,因爲它說,它無法找到容器「雄貓」
任何想法?
這裏是我的arquillian.xml
<extension qualifier="cube">
<property name="connectionMode">STARTORCONNECTANDLEAVE</property>
</extension>
<extension qualifier="docker">
<property name="serverVersion">1.14</property>
<property name="serverUri">unix:///var/run/docker.sock</property>
<!--<property name="serverUri">localhost:2375</property>-->
<property name="dockerInsideDockerResolution">false</property>
<property name="definitionFormat">CUBE</property>
<property name="dockerContainersFile">docker-compose.yml</property>
<property name="dockerRegistry">https://internalnexus.com:5000/</property>
<property name="username">user</property>
<property name="password">pass</property>
<property name="email">email</property>
</extension>
<container qualifier="tomcat" default="true">
<configuration>
<property name="host">10.0.20.1</property>
<property name="httpPort">8080</property>
<property name="user">user</property>
<property name="pass">pass</property>
</configuration>
</container>
這裏是我的搬運工撰寫文件
`
tomcat:
image: internalnexus.com:5000/perf-tomcat:latest
exposedPorts: [8080/tcp,8089/tcp]
alwaysPull: false
await:
strategy: polling
env: [TOMCAT_PASS=mypass, JAVA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8089 -Dcom.sun.management.jmxremote.rmi.port=8089 -Dcom.sun.management.jmxremote.ssl=false -Dspring.config.location=/usr/local/tomcat/conf/application.properties]
portBindings: [8089/tcp, 8080/tcp]
links:
- database:database
database:
image: internalnexus.com:5000/perfstats-sqlserver:latest
exposedPorts: [1433/tcp]
env: [SA_PASSWORD=pass, ACCEPT_EULA=Y]
await:
strategy: log
match: 'ms sql server is done'
stdOut: true
stdErr: true
timeout: 30
portBindings: [1433/tcp]
`
是的,我們正在使用「Docker on Docker」設置Arquillian Cube文檔引用,而不是在Jenkins節點上安裝docker,而是安裝包含docker.sock的卷以使用父Docker實例。這可以避免「Docker in Docker」問題。除了獲取部署tomcat容器的父Docker計算機的IP之外,這一切都工作正常。而是在測試中使用localhost。 – MDW
但我不明白一件事,並堅持要求堅持,如果你在碼頭上使用碼頭,你只使用一個碼頭主機,不是嗎? – lordofthejars
對於我所理解的是,您需要與兄弟容器進行通信而不是鏈接,不是嗎? Jenkins節點和Tomcat節點是在同一個泊塢窗主機中運行的兄弟節點。 – lordofthejars