与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名下广告了。
我怎么解决这个问题:
- 在Docker容器中运行Maventesting,但是这需要Maven项目来运行另一个Maven项目。
- 在运行时在程序中更新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
而卡夫卡应该宣传自己是同一个名字。