based on http://www.steves-internet-guide.com/mosquitto-bridge-configuration/

An MQTT broker can be executed as a Docker container. This fact provides flexibility when deploying these services, especially in edge devices, like Raspberry Pi or similar. Searching for MQTT, you’ll get:

$ docker search mqtt
NAME                                                  DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
eclipse-mosquitto                                     Eclipse Mosquitto is an open source message …   899       [OK]
ncarlier/mqtt                                         MQTT Docker image based on Debian.              34                   [OK]
efrecon/mqtt-client                                   Minimal MQTT clients based on mosquitto         10                   [OK]
dersimn/mqtt-admin                                    Docker image for <https://github.com/hobbyqua…>   5                    [OK]
...

The first one, eclipse-mosquitto, is the official image for the Mosquitto MQTT broker, probably the most widely used MQTT broker.

The third one, efrecon/mqtt-client is also a helpful image that allows having a handy client to test deployments.

Starting an MQTT broker as a container

The docker-compose.yml file below indicates how to start up an MQTT broker locally:

version: '3'

networks:
    pubsub-net:
        driver: bridge

services:
    mosquitto1:
        image: eclipse-mosquitto
        container_name: broker1
        ports:
            - 1883:1883
        volumes:
            - ./mosquitto:/mosquitto/
        networks:
            - pubsub-net

in this case we need a ./mosquitto/config/mosquitto.conf file as simple as this:

allow_anonymous true
listener 1883

Executing docker compose up we will get something like:

[+] Running 4/4
 ⠿ mosquitto1 Pulled                                                        3.7s
   ⠿ ef5531b6e74e Pull complete                                             1.2s
   ⠿ a7ca8a06e1f9 Pull complete                                             1.3s
   ⠿ b02910b6532b Pull complete                                             1.4s
[+] Running 2/2
 ⠿ Network day2_b_bridgingmqttbrokers_pubsub-net  Created                   0.0s
 ⠿ Container broker1                              Cr...                     0.1s
Attaching to broker1
broker1  | 1676744530: mosquitto version 2.0.15 starting
broker1  | 1676744530: Config loaded from /mosquitto/config/mosquitto.conf.
broker1  | 1676744530: Opening ipv4 listen socket on port 1883.
broker1  | 1676744530: Opening ipv6 listen socket on port 1883.
broker1  | 1676744530: mosquitto version 2.0.15 running

check with docker ps -a:

We can do a quick test by opening two terminals and executing in one of them:

docker run -it --rm **--network=host** efrecon/mqtt-client sub -t 'test/#'

or

docker run -it --rm **--net=container:broker1** efrecon/mqtt-client sub -t 'test/#'

<aside> 🗣 compare the use of --network=...

</aside>

and, in the other terminal: