| title | Docker Auto-Discovery |
|---|---|
| description | Automatically find and proxy Docker containers with one click |
| category | integration |
Already running apps in Docker? Charon automatically finds your containers and offers one-click proxy setup. Supports both local Docker installations and remote Docker servers.
Docker auto-discovery eliminates manual IP address hunting and port memorization. Charon queries the Docker API to list running containers, extracts their network information, and lets you create proxy configurations with a single click.
- Charon connects to Docker via socket or TCP
- Queries running containers and their exposed ports
- Displays container list with network details
- You select a container and assign a domain
- Charon creates the proxy configuration automatically
- No more running
docker inspectto find container IPs - No more updating configs when containers restart with new IPs
- Container name resolution handles dynamic addressing
- Spin up a new service, proxy it in seconds
- Test different versions by proxying multiple containers
- Remove proxies as easily as you create them
- Developers create their own proxy entries
- No central config file bottlenecks
- Self-service infrastructure access
For Charon to discover containers, it needs Docker API access.
Docker Compose:
services:
charon:
image: charon:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock:roDocker Run:
docker run -v /var/run/docker.sock:/var/run/docker.sock:ro charonSecurity Note: The socket grants significant access. Use read-only mode (
:ro) and consider Docker socket proxies for production.
Connect to Docker hosts over TCP:
- Go to Settings → Docker
- Click Add Remote Host
- Enter connection details:
- Name: Friendly identifier
- Host: IP or hostname
- Port: Docker API port (default: 2375/2376)
- TLS: Enable for secure connections
- Upload TLS certificates if required
- Click Test Connection, then Save
- Navigate to Hosts → Add Host
- Click Select from Docker
- Choose Docker host (local or remote)
- Browse running containers
Each container shows:
- Name: Container name
- Image: Source image and tag
- Ports: Exposed ports and mappings
- Networks: Connected Docker networks
- Status: Running, paused, etc.
- Click a container row to select it
- If multiple ports are exposed, choose the target port
- Enter the domain name for this proxy
- Configure SSL options
- Click Create Host
When containers restart:
- Charon continues proxying to the container name
- Docker's internal DNS resolves the new IP
- No manual intervention required
If a container is on multiple networks, specify which network Charon should use for routing:
- Edit the host after creation
- Go to Advanced → Docker
- Select the preferred network
Override the auto-detected port:
- Edit the host
- Change the backend URL port manually
- Useful for containers with non-standard port configurations
| Issue | Cause | Solution |
|---|---|---|
| No containers shown | Socket not mounted | Add Docker socket volume |
| Connection refused | Remote Docker not configured | Enable TCP API on Docker host |
| Container not proxied | Container not running | Start the container |
| Wrong IP resolved | Multi-network container | Specify network in advanced settings |
| Socket proxy not reachable | DOCKER_HOST misconfigured | Verify socket-proxy container is on the same network and DOCKER_HOST matches the service name |
- Socket Access: The Docker socket grants broad system access — the
:roflag prevents deleting the socket file, but does not restrict which Docker API calls can be made. If you don't need container auto-discovery, skip the socket mount entirely. For production, use a socket proxy (see below). - Remote Connections: Always use TLS for remote Docker hosts.
- Network Isolation: Use Docker networks to segment container communication.
A Docker socket proxy sits between Charon and the Docker daemon, filtering API calls so only the endpoints Charon actually needs are reachable. Charon only uses GET /containers/* to list containers, so you can lock everything else down.
Recommended proxy: lscr.io/linuxserver/socket-proxy
services:
socket-proxy:
image: lscr.io/linuxserver/socket-proxy:latest
container_name: socket-proxy
restart: unless-stopped
environment:
- CONTAINERS=1 # Allow container listing (required by Charon)
- POST=0 # Deny all write operations
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy-internal
charon:
image: ghcr.io/wikid82/charon:latest
environment:
- DOCKER_HOST=tcp://socket-proxy:2375
# No docker.sock volume needed!
networks:
- proxy-internal
- ...
networks:
proxy-internal:
internal: trueWith this setup, Charon talks to the proxy instead of the raw Docker socket. The proxy only answers container listing requests — everything else is blocked.
- Web UI - Point & click management
- SSL Certificates - Automatic HTTPS for proxied containers
- Back to Features