与Docker容器交谈时更新本地/ etc / hosts

我maven POM文件创builddocker容器与testing服务。 它还运行必须与这些容器中的服务对话的testing。 容器可以使用在docker-compose.yml文件中定义为链接的主机名相互交谈,例如:

 kafka: image: spotify/kafka hostname: kafka environment: ADVERTISED_HOST: kafka ADVERTISED_PORT: 9092 ports: - "9092:9092" our_service: build: ../../logstash/ ports: - "8081:8080" links: - kafka 

这是因为每个容器的/etc/hosts文件都包含带有到集群中其他容器的链接的条目。 但是,在群集之外,运行Maventesting的地方/etc/hosts没有更新,我不希望它被更新,因为它将在Jenkins CI上运行。

当然,我的testing可以通过localhost:9092与Kafka交谈,但Kafka要求生产者连接到kafka主机,而不是本地主机,如果它已经在kafka名下广告了。

我怎么解决这个问题:

  1. 在Docker容器中运行Maventesting,但是这需要Maven项目来运行另一个Maven项目。
  2. 在运行时在程序中更新JVM的DNScaching。

这两个对我来说都是一个肮脏的解

我会给出一个build议(不过,我不确定卡夫卡内部是否允许这样做)。

您可以使用DNS服务(如nip.io)为kafka.127.0.0.1.nip.io创build127.0.0.1的名称。 您的服务将成为:

 kafka: image: spotify/kafka hostname: kafka environment: ADVERTISED_HOST: kafka.127.0.0.1.nip.io ADVERTISED_PORT: 9092 ports: - "9092:9092" our_service: build: ../../logstash/ ports: - "8081:8080" links: - kafka:kafka.127.0.0.1.nip.io 

现在,卡夫卡制作者在卡夫卡外部和内部都会连接到卡夫卡kafka.127.0.0.1.nip.io而卡夫卡应该宣传自己是同一个名字。