我正在使用docker-maven-plugin
中的fabric8
插件来设置两个容器:
可以将两个容器分别设置好。我可以从外部(从主机)连接到两者。我这样做如下:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.22.1</version>
<configuration>
<autoCreateCustomNetworks>true</autoCreateCustomNetworks>
<images>
<image>
<alias>database</alias>
<name>postgres:9</name>
<run>
<network>
<name>network</name>
<alias>database</alias>
</network>
<ports>
<port>db-port:5432</port>
</ports>
<wait>
<log>ready to accept connections</log>
</wait>
</run>
</image>
<image>
<alias>container</alias>
<name>inovatrend/tomcat8-java8</name>
<run>
<network>
<name>network</name>
<alias>tomcat</alias>
</network>
<dependsOn>
<container>database</container>
</dependsOn>
<ports>
<port>tomcat-port:8080</port>
</ports>
<wait>
<http>
<url>http://localhost:${tomcat-port}</url>
</http>
</wait>
</run>
</image>
</images>
</configuration>
</plugin>
我在配置允许tomcat8容器连接到Postgres容器时遇到麻烦。如您所见,我正在每个图像中创建一个自定义网络,并且tomcat容器取决于数据库容器。
<network>
<name>network</name>
<alias>database</alias>
</network>
和<network>
<name>network</name>
<alias>tomcat</alias>
</network>
<dependsOn>
<container>database</container>
</dependsOn>
但是我无法在tomcat容器中建立到localhost:5432
的JDBC连接。此配置正确吗? tomcat8应该使用哪个
IP: PORT
连接数据库?理想情况下,此IP: PORT
不应固定,因此可以并发执行多个maven实例而不会产生干扰(对于同时进行的构建(如Jenkins)很有用)。
最佳答案
我遇到了同样的问题。实际上,我最终得到的docker-maven-plugin的配置与您按照文档进行的配置相同,并且也不知道从一个容器到另一个容器的URL是什么。
丢失的部分是了解Docker网络的工作方式。在此之后tutorial将消息带回家。
简而言之。要从tomcat容器访问数据库,请使用database:5432
。
当容器在同一网络上(例如,在这种情况下为定制网桥网络)时,它们可以使用其主机名相互解析。 G。 database
。容器公开端口-在这种情况下,数据库端口为randomly-assigned:5432
。现在,在Docker网络中,机器本身上的端口可以工作-5432
。从外部(例如从主机),它是randomly-assigned
端口。
关于maven - 来自fabric8的docker-maven-plugin:tomcat和postgres容器之间的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935188/