Mobile Proxy Docker Setup
Step-by-step mobile proxy Docker setup tutorial. Configure daemon pulls, multi-stage builds, container runtime environments, and Docker Compose with real 4G/5G carrier IPs.
- Clear boundary between layers — configure proxy variables for Docker daemon image pulls, build steps, or container runtime independently.
- Docker Compose orchestration — pass HTTP_PROXY and NO_PROXY settings to specific microservices without polluting host networking.
- Bypass internal networking cleanly — ensure databases and localhost services remain directly reachable with strict NO_PROXY rules.
- Avoid cached credential leaks — pass proxy credentials via build arguments or Docker secrets to prevent baking passwords into image layers.
Docker Proxy Environment
Docker proxy configuration is widely misunderstood because Docker operates across three isolated networking boundaries: the Docker daemon (dockerd), the build process (docker build), and running container instances (docker run). Setting a proxy in one layer does not propagate to the others. Understanding these three distinct scopes is essential to building reliable containerized proxy pipelines.
| Scope Layer | What It Controls | Configuration Location |
|---|---|---|
| Daemon Scope | Image pulling from Docker Hub / registries | /etc/systemd/system/docker.service.d/http-proxy.conf |
| Build Scope | Package installation (apt-get, pip, npm) in Dockerfile | --build-arg HTTP_PROXY=... |
| Container Runtime | Outbound traffic from running applications | docker run -e HTTP_PROXY=... or docker-compose.yml |
Container Proxy Configuration
To route outbound traffic from a container through a dedicated mobile proxy, supply the standard proxy environment variables at runtime. Most containerized runtimes (Python, Go, Node.js, cURL) automatically read these variables upon initialization.
docker run --rm \ -e HTTP_PROXY="http://user123:secret456@proxy.pxm2.io:8000" \ -e HTTPS_PROXY="http://user123:secret456@proxy.pxm2.io:8000" \ -e NO_PROXY="localhost,127.0.0.1,host.docker.internal" \ curlimages/curl:latest https://ipinfo.io/json
Alternatively, you can configure your Docker CLI client config file (~/.docker/config.json) to automatically inject proxy settings into all newly spawned containers without repeating -e flags.
{
"proxies": {
"default": {
"httpProxy": "http://user123:secret456@proxy.pxm2.io:8000",
"httpsProxy": "http://user123:secret456@proxy.pxm2.io:8000",
"noProxy": "localhost,127.0.0.1,.internal"
}
}
}
Docker Compose Proxy Setup
In multi-container stacks, Docker Compose allows granular control over which services use mobile proxies and which communicate directly over local networks. For instance, scraping worker instances can route through dedicated 4G/5G modems while database and Redis cache services remain completely local.
version: '3.8'
services:
scraper-worker:
image: my-scraper:latest
environment:
- HTTP_PROXY=http://user123:secret456@proxy.pxm2.io:8000
- HTTPS_PROXY=http://user123:secret456@proxy.pxm2.io:8000
- NO_PROXY=localhost,127.0.0.1,postgres,redis
depends_on:
- postgres
- redis
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: scraper_data
POSTGRES_PASSWORD: secretpassword
redis:
image: redis:7-alpine
Network-Level Proxy
Some containerized tools refuse to respect environment variables or lack proxy support in their code. In such scenarios, network-level routing or sidecar proxy patterns ensure all container traffic is redirected without modifying application source code.
By launching a sidecar container running redsocks or a WireGuard gateway connected to the mobile proxy host, you can route all outbound TCP streams from other containers sharing that network namespace.
# Service sharing the sidecar proxy network
services:
proxy-gateway:
image: custom-redsocks-gateway
cap_add:
- NET_ADMIN
environment:
- PROXY_SERVER=proxy.pxm2.io
- PROXY_PORT=1080
legacy-app:
image: my-app:latest
network_mode: "service:proxy-gateway"
Docker Proxy Troubleshooting
Common obstacles when configuring mobile proxies inside Docker containers and how to solve them:
| Issue | Root Cause | Fix |
|---|---|---|
| Database connection timeout | NO_PROXY is missing container service names. | Add database hostnames (e.g. postgres, redis) to NO_PROXY environment variable. |
| docker build fails with 407 | Build steps lack proxy credentials. | Pass --build-arg HTTP_PROXY during build, or use BuildKit secret mounts. |
| host.docker.internal unreachable | Local host resolution routed to mobile modem. | Add host.docker.internal to NO_PROXY. |
| docker pull times out | Daemon proxy configuration missing. | Configure HTTP_PROXY in systemd docker.service.d/http-proxy.conf and reload daemon. |
France
India
Poland
Frequently Asked Questions
What is the difference between daemon proxy and container proxy?
The Docker daemon proxy configuration (in systemd or ~/.docker/config.json) governs how dockerd pulls images from registries like Docker Hub. In contrast, container proxy variables (HTTP_PROXY and HTTPS_PROXY) govern the outbound network traffic produced by applications running inside the container instances.
How do I configure a proxy in Docker Compose?
Define environment variables under the service block in docker-compose.yml, specifying HTTP_PROXY, HTTPS_PROXY, and NO_PROXY. You can also use an .env file to centralize proxy host and credential settings across all services in the compose project.
Why can containers not connect to local databases when HTTP_PROXY is set?
If NO_PROXY is missing or incomplete, container requests to localhost or private Docker bridge network names are sent out to the mobile proxy server, which cannot resolve internal container IPs. Always include 127.0.0.1, localhost, and your internal network subnets in NO_PROXY.
How do I pass a proxy during docker build without baking secrets into images?
Pass proxy settings as build arguments: docker build --build-arg HTTP_PROXY="...". Build arguments are not persisted in image layers when using multi-stage builds, ensuring proxy passwords do not appear in docker history.
Can Docker route all container traffic through a SOCKS5 mobile proxy?
Docker does not natively support system-wide SOCKS5 routing at the daemon level. To route all container traffic through SOCKS5, use a sidecar container running redsocks or wireguard, or configure individual applications inside containers to speak SOCKS5.
Related Mobile Proxy Guides
Explore setup tutorials for developer environments, automation scripts, and server configurations.
Developer & Automation Guides
Platform & Operating Systems
Scale Containerized Workloads on Real Mobile Hardware
Integrate dedicated 4G/5G mobile modems directly into Docker and Kubernetes scraping pods. Unthrottled bandwidth and clean carrier trust scores.
Get a Mobile Proxy