docker compose reverse port map without using Host network driver (--net=host)

Deemo@bookwormstory.social to Selfhosted@lemmy.world – 18 points –

Hi guys quick question say you run a a application on your localhost (example lets say couchdb runing directly on localhost:3434 not in docker).

Now you have a docker container (say caddy, ngnix, etc). Is there a way to allow docker container to acess localhost:3434 WITHOUT using the Host network driver (--net=host)

9

Add this to the service in your docker-compose.yml

  extra_hosts:
     - host.docker.internal:host-gateway

Example:

services:
    redis:
    restart: always
    container_name: redis
    image: redis:7.2-alpine
    extra_hosts:
      - host.docker.internal:host-gateway

Then you can reach your host from inside the container via host.docker.internal:3434

host.docker.internal is like your "localhost" on the host. It is a special DNS name.

My solution is to create a docker network with the macvlan driver connected to a bridge interface on the host. Then you make the database listen on the bridge or just leave it on all interfaces. Don't forget to configure the ips.

I can share my config later.

You have a lot of options: https://docs.docker.com/network/drivers/

What's specifically the issue with the host driver in this case?

I should elaborate. I want to switch from caddy to authentiks internal reverse proxy. By default authentik uses ports 9000 and 90443 and you have the option to change them to 80 and 443 via docker compose.

Using host mode throws a wrench in the ports and authentik is made of more than one container.