TCP/UDP port forwarding between Docker networks or external hosts via socat
1.7K
Dead-simple TCP/UDP port forwarding between Docker networks, containers, or external hosts. One container, two environment variables.
Docker networks are isolated by design. Sometimes you need container A (on network X) to reach container B (on network Y), or you need to expose a database on a different port, or bridge two networks without merging them. This does it in one line.
services:
# Forward local port 3307 to your database on port 3306
db-forward:
image: zachbg/port-forward:latest
restart: unless-stopped
ports:
- "3307:3306"
environment:
REMOTE_HOST: database
REMOTE_PORT: 3306
networks:
- frontend
- backend
networks:
frontend:
backend:
| Variable | Default | Description |
|---|---|---|
REMOTE_HOST | required | Target hostname or IP |
REMOTE_PORT | required | Target port |
LOCAL_PORT | same as REMOTE_PORT | Port to listen on |
PROTOCOL | tcp | tcp, udp, tcp-to-udp, udp-to-tcp |
MAX_CONNECTIONS | 100 | Max concurrent connections (TCP) |
TIMEOUT | 3600 | Connection timeout in seconds |
VERBOSE | false | Enable debug logging |
services:
bridge:
image: zachbg/port-forward:latest
environment:
REMOTE_HOST: internal-api
REMOTE_PORT: 8080
networks:
- public
- internal
webapp:
image: myapp
environment:
API_URL: http://bridge:8080
networks:
- public
internal-api:
image: myapi
networks:
- internal
services:
pg-forward:
image: zachbg/port-forward:latest
ports:
- "5432:5432"
environment:
REMOTE_HOST: 10.0.1.50
REMOTE_PORT: 5432
services:
dns-forward:
image: zachbg/port-forward:latest
ports:
- "53:53/udp"
environment:
REMOTE_HOST: 8.8.8.8
REMOTE_PORT: 53
PROTOCOL: udp
services:
redis-forward:
image: zachbg/port-forward:latest
ports:
- "16379:16379"
environment:
REMOTE_HOST: redis-cluster
REMOTE_PORT: 6379
LOCAL_PORT: 16379
Content type
Image
Digest
sha256:e6d038218…
Size
4.4 MB
Last updated
6 months ago
docker pull zachbg/port-forward