If it helps, here’s how I had my gluetun / transmission set up with mullvad (I’ve since moved to proton for port forwarding but I saved the mullvad config in case I needed to switch back):
services:
gluetun:
image: qmcgaw/gluetun:v3
container_name: gluetun
restart: always
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./volumes/gluetun:/gluetun
environment:
- TZ=America/New_York
# Mullvad
- VPN_SERVICE_PROVIDER=mullvad
- VPN_TYPE=wireguard
- SERVER_COUNTRIES=USA
- SERVER_CITIES=New York NY
- WIREGUARD_PRIVATE_KEY=
- WIREGUARD_ADDRESSES=x.x.x.x/32
- UPDATER_PERIOD=24h
- UPDATER_MIN_RATIO=0.1
- UPDATER_VPN_SERVICE_PROVIDERS=mullvad,privado,protonvpn
networks:
- default
- ingress
transmission:
image: linuxserver/transmission:latest
container_name: transmission
restart: always
network_mode: "service:gluetun"
environment:
- PUID=0
- PGID=0
- TZ=America/New_York
volumes:
- ./volumes/transmission:/config
- /volume1/Media:/media
flood:
image: jesec/flood:latest
container_name: flood-sidecar
restart: always
command: --port 3000
user: "0:0"
network_mode: "service:gluetun"
volumes:
- ./volumes/transmission:/config
- /volume1/Media:/media:ro
environment:
- TZ=America/New_York
- HOME=/config
labels:
- com.centurylinklabs.watchtower.enable=true
- "traefik.enable=true"
- "traefik.http.routers.flood.rule=Host(`flood.example.com`)"
- "traefik.http.services.flood.loadbalancer.server.port=3000"
- "traefik.http.routers.flood.entrypoints=websecure"
- "traefik.http.routers.flood.tls.certresolver=mytlschallenge"
# This example uses "Selective Authentication"
- "traefik.http.routers.flood.middlewares=oauth-middleware"
Idk how zimaos works, but the way to attach containers like this is with network_mode: "service:othercontainer" which might need them to be in the same compose file (the docs aren’t clear).
Also note that you can’t put any port mappings on a container using network_mode service, you have to put them on the other container that is handling networking since the first container is piggybacking off of the other and doesn’t have its own networking.





Ah cool, the docs made it sound like container: uses the container ID hash instead of the name so I wasn’t sure how that works. I just put stuff like this in the same compose file since they’re all closely related.