Docker-Maven-плагин из Fabric8: связь между Tomcat и Postgres контейнер

Я использую 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>

Но я не могу установить соединение JDBC с localhost:5432 в контейнере для котов.

Это правильная конфигурация? Который IP:PORT должен ли tomcat8 использовать для подключения к базе данных? В идеале это IP:PORT не должно быть исправлено, поэтому несколько экземпляров maven могут выполняться одновременно без вмешательства (полезно для одновременных сборок, таких как Jenkins).

1 ответ

Я столкнулся с той же проблемой. На самом деле я получил ту же самую конфигурацию docker-maven-plugin, что и вы, следуя документации, и также не знал, какой будет URL-адрес для перехода из одного контейнера в другой.

Недостающим было понимание того, как работает сеть Docker. После этого урока пришло домой сообщение.

Короче. Для доступа к базе данных из контейнера Tomcat используйте database:5432,

Когда контейнеры находятся в одной сети (например, в этом случае пользовательская мостовая сеть), они могут разрешать друг друга, используя свои имена хостов - например, database, Контейнеры предоставляют порты - в этом случае порт базы данных randomly-assigned:5432, Теперь в сети Docker порты самих машин работают - так 5432, Снаружи, например с хоста, это randomly-assigned порт.

Другие вопросы по тегам