maven - 来自fabric8的docker-maven-plugin:tomcat和postgres容器之间的连接

标签 maven docker docker-maven-plugin

我正在使用docker-maven-plugin中的fabric8插件来设置两个容器:

  • Postgres
  • tomcat8

  • 可以将两个容器分别设置好。我可以从外部(从主机)连接到两者。我这样做如下:
    <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/

    相关文章:

    java - 等待 RabbitMQ docker 容器使用 docker-maven-plugin 启动

    java - 找不到tomcat eclipse main jsp随机类

    node.js - docker 。 npm 安装 -> 错误 : getaddrinfo ENOTFOUND

    maven - 使用 dockerfile-maven-plugin 标记创建的图像

    docker - 无法访问通过 NodePort 公开的 Kubernetes 服务

    node.js - 是否可以在 docker 容器中使用 npm serialPort?

    docker - 容器初始化导致\“rootfs_linux.go:58:挂载到rootfs引起的不是目录

    java - 商业Web应用平台架构

    java - 使用属性值设置 Maven 父版本?

    java - Maven springsource 仓库