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
порт.