2017-06-19 39 views
0

我一直在嘗試獲取我的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] 
` 

回答

0

我有一個問題,這是爲什麼你需要父母搬運工主機IP?

我看到的是,父docker host ip是Jenkins節點正在使用的docker host ip。這個IP是外部呼叫者訪問Jenkins所需的IP。然後在Docker實例中運行另一個Docker主機,或者您正在重用Jenkins運行的Docker主機?

+0

是的,我們正在使用「Docker on Docker」設置Arquillian Cube文檔引用,而不是在Jenkins節點上安裝docker,而是安裝包含docker.sock的卷以使用父Docker實例。這可以避免「Docker in Docker」問題。除了獲取部署tomcat容器的父Docker計算機的IP之外,這一切都工作正常。而是在測試中使用localhost。 – MDW

+0

但我不明白一件事,並堅持要求堅持,如果你在碼頭上使用碼頭,你只使用一個碼頭主機,不是嗎? – lordofthejars

+0

對於我所理解的是,您需要與兄弟容器進行通信而不是鏈接,不是嗎? Jenkins節點和Tomcat節點是在同一個泊塢窗主機中運行的兄弟節點。 – lordofthejars