docker compose reverse port map without using Host network driver (--net=host)
from Deemo@bookwormstory.social to selfhosted@lemmy.world on 26 Jul 2024 13:50
https://bookwormstory.social/post/2239518

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)

#selfhosted

threaded - newest

MangoPenguin@lemmy.blahaj.zone on 26 Jul 2024 13:56 next collapse

Have you tried the IP of the host? IIRC that should work.

just_another_person@lemmy.world on 26 Jul 2024 14:25 next collapse

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

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

Deemo@bookwormstory.social on 27 Jul 2024 00:43 collapse

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.

morethanevil@lemmy.fedifriends.social on 26 Jul 2024 14:36 next collapse

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.

Deemo@bookwormstory.social on 27 Jul 2024 04:22 collapse

Thanks for the tip

superpants@lemmy.world on 26 Jul 2024 14:48 next collapse

host.docker.internal

stackoverflow.com/…/how-to-access-host-port-from-…

possiblylinux127@lemmy.zip on 26 Jul 2024 15:16 next collapse

Put them on the same network

KaninchenSpeed@sh.itjust.works on 26 Jul 2024 15:24 next collapse

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.

lorentz@feddit.it on 26 Jul 2024 16:25 collapse

You can use the flag

–add-host myname=host-gateway

in your container “myname” will resolve as the IP of your host.

documentation at: docs.docker.com/reference/cli/docker/…/run/#add-h…>