我一直在尝试获取我的Junit测试中使用的tomcat服务器(在docker容器中运行)的url而不仅仅是localhost。这很重要的原因是我的测试在本地运行正常,但是当我们的jenkins节点运行时,它也运行在Docker中,localhost不起作用。
我已经将节点配置为在Docker配置上使用Docker。我需要url使用父docker机器的ip。奇怪的是jmx url似乎可以很好地部署测试战,但是单元测试url本身存在问题。我用ip硬编码重写了测试,这很好用,但是在这里想要在本地运行测试的开发人员真的不是最佳解决方案。
我也尝试过使用@CubeIp和@DockerUrl或@HostIp,但它们只返回localhost或null,因为它说找不到容器" tomcat"
有什么想法吗?
这是我的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 :(得分:0)
我有一个问题,这就是为什么你需要父码头主机ip?
我看到的是父Docker主机ip是Jenkins节点正在使用的docker主机ip。此IP是外部呼叫者访问Jenkins所需的IP。然后在该docker实例中运行另一个docker主机,或者您正在重用Jenkins运行的docker主机?