Maven, Docker получить фактический IP-адрес хост-системы
С помощью Maven и docker-maven-plugin я настроил контейнеры Apache Kafka + ZooKeeper:
<image>
<name>wurstmeister/zookeeper:${zookeeper.version}</name>
<alias>zookeeper</alias>
<run>
<ports>
<port>${zookeeper.port}:2181</port>
</ports>
</run>
</image>
<image>
<name>wurstmeister/kafka:${kafka.version}</name>
<alias>kafka</alias>
<run>
<ports>
<port>9093:9092</port>
</ports>
<links>
<link>zookeeper:zookeeper</link>
</links>
<env>
<KAFKA_ADVERTISED_HOST_NAME>192.168.1.202</KAFKA_ADVERTISED_HOST_NAME>
<KAFKA_ADVERTISED_PORT>9093</KAFKA_ADVERTISED_PORT>
<KAFKA_ZOOKEEPER_CONNECT>zookeeper:${zookeeper.port}</KAFKA_ZOOKEEPER_CONNECT>
</env>
</run>
</image>
Как вы можете видеть, чтобы заставить его работать, я должен предоставить фактический IP-адрес моей хост-системы:
<KAFKA_ADVERTISED_HOST_NAME>192.168.1.202</KAFKA_ADVERTISED_HOST_NAME>
Есть ли способ в Maven или Docker- Maven -плагин, чтобы получить этот IP-адрес автоматически без необходимости его жесткого кодирования?
ОБНОВЛЕНО
Я нашел плагин, который позволяет мне получить IP-адрес хоста:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>get-local-ip</id>
<goals>
<goal>local-ip</goal>
</goals>
<configuration>
<localIpProperty>local.ip</localIpProperty>
</configuration>
</execution>
</executions>
</plugin>
но для того, чтобы использовать его мне нужно выполнить build-helper:local-ip
Цель перед остальными командами Maven:
mvn build-helper:local-ip docker:start
Как связать этот плагин с некоторой фазой / целью, чтобы автоматически вызывать его на некоторой ранней фазе инициализации без необходимости вызова build-helper:local-ip
каждый раз вручную?
1 ответ
Из документации для build-helper-maven-plugin:
По умолчанию привязывается к фазе жизненного цикла: process-test-classes
Вы можете изменить его, чтобы привязать к любой фазе, которую вы хотите, например,
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>local-ip</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
</plugin>
В
local-ip
только из build-helper-maven-plugin возвращается
127.0.0.1
.
В моем случае был необходим сетевой адрес - что-то вроде
192.168.17.112
.
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
java.net.DatagramSocket socket = new java.net.DatagramSocket()
socket.connect(java.net.InetAddress.getByName('google.com'), 80)
project.properties['host.address'] = socket.getLocalAddress().getHostAddress()
</source>
</configuration>
</execution>
</executions>
</plugin>
Недвижимость
host.address
затем содержит желаемый сетевой IP-адрес.
(Не голосуйте за меня, а за ответ, который мне помог: получение IP-адреса текущей машины с помощью Java)