Szymon Roziewski
Szymon Roziewski

Reputation: 1129

Two rabbitmq isntances on one server with docker compose how to change the default port

I would like to run two instances of rabbitmq on one server. All I create with docker-compose. The thing is how I can change the default node and management ports. I have tried setting it via ports but it didn't help. When I was facing the same scenario but with mongo, I have used command: mongod --port CUSTOM_PORT . What would be the analogical command here for rabbitmq?

Here is my config for the second instance of rabbitmq.

version: '2'
services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq_test'
    ports:
        - 5673:5673
        - 15673:15673
    volumes:
        - ./rabbitmq/data/:/var/lib/rabbitmq/
        - ./rabbitmq/log/:/var/log/rabbitmq
    networks:
        - rabbitmq_go_net_test
    environment:
        RABBITMQ_DEFAULT_USER: 'test'
        RABBITMQ_DEFAULT_PASS: 'test'
        HOST_PORT_RABBIT: 5673
        HOST_PORT_RABBIT_MGMT: 15673

networks:
  rabbitmq_go_net_test:
    driver: bridge

And the outcome is below

Management plugin: HTTP (non-TLS) listener started on port 15672
rabbitmq_test | 2021-03-18 11:32:42.553 [info] <0.738.0> Ready to start client connection listeners
rabbitmq_test | 2021-03-18 11:32:42.553 [info] <0.44.0> Application rabbitmq_prometheus started on node rabbit@fb24038613f3
rabbitmq_test | 2021-03-18 11:32:42.557 [info] <0.1035.0> started TCP listener on [::]:5672

We can see that there are still ports 5672 and 15672 exposed instead of 5673 and 15673.

EDIT

ports:
        - 5673:5672
        - 15673:15672

I have tried that the above conf yet with no success

rabbitmq_test | 2021-03-18 14:08:56.167 [info] <0.797.0> Management plugin: HTTP (non-TLS) listener started on port 15672
rabbitmq_test | 2021-03-18 14:08:56.167 [info] <0.903.0> Statistics database started.
rabbitmq_test | 2021-03-18 14:08:56.167 [info] <0.902.0> Starting worker pool 'management_worker_pool' with 3 processes in it
rabbitmq_test | 2021-03-18 14:08:56.168 [info] <0.44.0> Application rabbitmq_management started on node rabbit@9358e6f4d2a5
rabbitmq_test | 2021-03-18 14:08:56.208 [info] <0.44.0> Application prometheus started on node rabbit@9358e6f4d2a5
rabbitmq_test | 2021-03-18 14:08:56.213 [info] <0.916.0> Prometheus metrics: HTTP (non-TLS) listener started on port 15692
rabbitmq_test | 2021-03-18 14:08:56.213 [info] <0.44.0> Application rabbitmq_prometheus started on node rabbit@9358e6f4d2a5
rabbitmq_test | 2021-03-18 14:08:56.213 [info] <0.738.0> Ready to start client connection listeners
rabbitmq_test | 2021-03-18 14:08:56.216 [info] <0.1035.0> started TCP listener on [::]:5672

Upvotes: 3

Views: 3702

Answers (3)

Big_Boulard
Big_Boulard

Reputation: 1335

You can use set the RABBITMQ_NODE_PORT environment variable on the second service and let the first one listening on the default port (5672).

rabbitmq:
    image: rabbitmq:management
    ports:
      - 5673:5673 # map host port 5673 to container port 5673
      - 15673:15672 
    deploy:
      mode: replicated
      replicas: 1
    volumes:
      - rabbitmq-vol:/var/lib/rabbitmq/ # named volume t
    environment:
      - RABBITMQ_DEFAULT_USER=user # change this
      - RABBITMQ_DEFAULT_PASS=password # change this
      - RABBITMQ_NODE_PORT=5673

volumes:
  rabbitmq-vol:

Upvotes: 1

Nicolas Castro
Nicolas Castro

Reputation: 1552

A working example with rabbitmq:3.9.13-management-alpine

docker/rabbitmq/rabbitmq.conf:

loopback_users.guest = false
listeners.tcp.default = 5673
default_pass = guest
default_user = guest
default_vhost = /

docker/rabbitmq/Dockerfile:

FROM rabbitmq:3.9.13-management-alpine

COPY --chown=rabbitmq:rabbitmq rabbitmq.conf /etc/rabbitmq/rabbitmq.conf

EXPOSE 4369 5671 5672 5673 15691 15692 25672 25673

docker-compose.yml:

...
    rabbitmq:
        #image: "rabbitmq:3-management-alpine"
        build: './docker/rabbitmq/'
        container_name: my-rabbitmq
        environment:
            RABBITMQ_DEFAULT_VHOST: /
        ports:
            - 5673:5672
            - 15673:15672
        networks:
            - default
...

Upvotes: 0

Szymon Roziewski
Szymon Roziewski

Reputation: 1129

I have found the solution. I provided the configuration file to the rabbitmq container.

loopback_users.guest = false
listeners.tcp.default = 5673
default_pass = test
default_user = test
management.tcp.port = 15673

And a working docker-compose file

version: '2'
services:
  rabbitmq:
    image: rabbitmq:3-management-alpine
    container_name: 'rabbitmq_test'
    ports:
        - 5673:5673
        - 15673:15673
    volumes:
        - ./rabbitmq/data/:/var/lib/rabbitmq/
        - ./rabbitmq/log/:/var/log/rabbitmq
        - ./conf/myrabbit.conf:/etc/rabbitmq/rabbitmq.conf
    networks:
        - rabbitmq_go_net_test

networks:
  rabbitmq_go_net_test:
    driver: bridge

Upvotes: 3

Related Questions