2

我正在使用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>

但我无法localhost:5432在 tomcat 容器中建立 JDBC 连接。

这个配置正确吗?tomcat8应该使用哪个IP: PORT来连接数据库?理想情况下,这IP: PORT不应该是固定的,因此多个 maven 实例可以同时执行而不会干扰(对同时构建很有用,例如 Jenkins)。

4

1 回答 1

0

我遇到了同样的问题。实际上,我最终得到的 docker-maven-plugin 配置与您按照文档所做的配置完全相同,并且也不知道从一个容器到另一个容器的 URL 是什么。

缺少的部分是了解 Docker 网络是如何工作的。遵循本教程将消息带回家。

简而言之。要从 tomcat 容器访问数据库,请使用database:5432.

当容器在同一个网络上时(例如,在这种情况下是自定义桥接网络),它们可以使用它们的主机名相互解析 - 例如database. 容器公开端口——在这种情况下,数据库端口是randomly-assigned:5432. 现在在 Docker 网络中,机器上的端口本身就可以正常工作了5432。从外部,例如从主机,它是randomly-assigned端口。

于 2018-03-22T15:07:06.543 回答