This Docker images provides the confluentinc/cp-schema-registry image as base with the mDNS/ZeroConf stack on top. So you can enjoy the app while it is accessible by default as schema-registry.local. (Port 80)
- Requirements
- Getting starting
- docker-compose usage example
- Host configs
- Configure a different mDNS hostname
- Other top level domains
- Further reading
- Host enabled Avahi daemon
- Host enabled mDNS NSS lookup
To get a Schema Registry
service up and running create a docker-compose.yml
and insert the following
snippet:
version: "3"
services:
kafka:
image: hausgold/kafka
environment:
# Mind the .local suffix
- MDNS_HOSTNAME=kafka.local
ports:
# The ports are just for you to know when configure your
# container links, on depended containers
- "9092"
schema-registry:
image: hausgold/schema-registry
environment:
# Mind the .local suffix
MDNS_HOSTNAME: schema-registry.local
# Defaults to https://0.0.0.0:8081
SCHEMA_REGISTRY_LISTENERS: https://0.0.0.0:8081
# Defaults to kafka.local:9092
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: kafka:9092
# Set the default Apache Avro schema compatibility
#
# See: https://bit.ly/2TcpoY1
# See: https://bit.ly/2Hfo4wj
SCHEMA_REGISTRY_AVRO_COMPATIBILITY_LEVEL: full
ports:
# The ports are just for you to know when configure your
# container links, on depended containers
- "80" # CORS-enabled nginx proxy to the schema-registry
- "8081" # direct access to the schema-registry (no CORS)
links:
- kafka
schema-registry-ui:
image: hausgold/schema-registry-ui:0.9.5
network_mode: bridge
environment:
MDNS_HOSTNAME: schema-registry-ui.local
SCHEMAREGISTRY_URL: https://schema-registry.local
Afterwards start the service with the following command:
$ docker-compose up
Install the nss-mdns package, enable and start the avahi-daemon.service. Then, edit the file /etc/nsswitch.conf and change the hosts line like this:
hosts: ... mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns ...
The magic environment variable is MDNS_HOSTNAME. Just pass it like that to your docker run command:
$ docker run --rm -e MDNS_HOSTNAME=something.else.local hausgold/schema-registry
This will result in something.else.local.
You can also configure multiple aliases (CNAME's) for your container by passing the MDNS_CNAMES environment variable. It will register all the comma separated domains as aliases for the container, next to the regular mDNS hostname.
$ docker run --rm \
-e MDNS_HOSTNAME=something.else.local \
-e MDNS_CNAMES=nothing.else.local,special.local \
hausgold/schema-registry
This will result in something.else.local, nothing.else.local and special.local.
By default .local is the default mDNS top level domain. This images does not force you to use it. But if you do not use the default .local top level domain, you need to configure your host avahi to accept it.
- Docker/mDNS demo: https://github.com/Jack12816/docker-mdns
- Archlinux howto: https://wiki.archlinux.org/index.php/avahi
- Ubuntu/Debian howto: https://wiki.ubuntuusers.de/Avahi/