An active CleanProxies plan
Static ISP proxies for fixed US IPs, or rotating residential / mobile proxies for pools. The $4.99 trial works too.
To send a container's traffic through CleanProxies, pass the proxy as an environment variable: docker run -e HTTPS_PROXY=http://USERNAME:PASSWORD@HOST:PORT ..., or set it once for all new containers in ~/.docker/config.json under proxies.default. The daemon proxy (for image pulls) and build-time --build-arg are separate settings.
"Docker proxy" means three different things: the proxy your containers use when they run, the proxy used while an image builds, and the proxy the Docker daemon uses to pull images. For scrapers and AI agents in containers, the first one is what routes their requests through a CleanProxies IP; the other two only matter on networks that need a proxy to reach registries or package mirrors.
Static ISP proxies for fixed US IPs, or rotating residential / mobile proxies for pools. The $4.99 trial works too.
From the dashboard's proxy manager: host (or IP), port, username and password. Convert lists with the proxy list formatter.
proxies key in daemon.json needs Docker Engine 23.0 or later.HTTPS_PROXY (curl, wget, Python Requests and Go do; some runtimes need their own proxy setting).Both products use the same setup in Docker. What changes is how long an IP stays with you.
Recommended for most container workloads. Each dedicated US ISP IP stays fixed with unlimited bandwidth and threads, so a fleet of containers can run around the clock without counting GB. Give each container its own IP when every worker should keep a stable identity.
Dedicated static IPs registered to US and Canadian ISPs. The address stays the same for as long as you hold it, with unlimited bandwidth and HTTP(S) or SOCKS5 access.
Use rotating residential when containers scrape at scale across many sites and countries: pass a rotating line and each new connection can leave from a different IP, or a sticky line when a worker needs one IP for 5 minutes up to 24 hours. Keep image pulls and package installs off it, since residential is billed per GB.
Residential IPs in 190+ countries with country, state and city targeting. Rotate on every request or hold a sticky session for up to 90 minutes; GB never expire.
Every product connects over HTTP(S); static ISP and ISP subnet proxies also run SOCKS5 and IP whitelisting. This is what the dashboard gives you to paste into Docker.
IP:PORT:USER:PASSOne line per dedicated IP. With IP whitelisting on, the line is just IP:PORT and no password is sent.
HOST:PORT:USER:PASSGenerated in the proxy manager. The username carries the location and session you pick, so generate a new list to change them.
http://USERNAME:PASSWORD@HOST:PORTsocks5://USERNAME:PASSWORD@HOST:PORTUse http:// even for HTTPS websites; the TLS session still runs end to end. The socks5:// form is for static ISP and ISP subnet proxies.
Four steps, then check the exit IP with the free proxy checker.
Turn your dashboard line into http://USERNAME:PASSWORD@HOST:PORT. With an ISP proxy on IP whitelisting, authorize the Docker host's public IP and use http://IP:PORT, which keeps credentials out of your configs.
Export the URL in your shell as HTTPS_PROXY, then run docker run --rm -e HTTPS_PROXY curlimages/curl -s https://api.ipify.org. A bare -e HTTPS_PROXY copies the value from your shell.
Add the variables to ~/.docker/config.json for every new container, or to the environment: of the services in your Compose file.
Put localhost, 127.0.0.1 and your Compose service names in NO_PROXY so containers still reach your database, queue and each other directly.
Replace the highlighted placeholders with the values from your dashboard. Pick an example to see its code.
In ~/.docker/config.json, the proxies.default object sets HTTP_PROXY, HTTPS_PROXY and NO_PROXY (upper and lower case) in every container you create from then on, and passes them as build args. In Compose, set the variables per service and keep the URL in a .env file next to compose.yaml as HTTPS_PROXY=http://USERNAME:PASSWORD@HOST:PORT.
{
"proxies": {
"default": {
"httpProxy": "http://USERNAME:PASSWORD@HOST:PORT",
"httpsProxy": "http://USERNAME:PASSWORD@HOST:PORT",
"noProxy": "localhost,127.0.0.1"
}
}
}services:
scraper:
build: .
environment:
HTTP_PROXY: ${HTTPS_PROXY}
HTTPS_PROXY: ${HTTPS_PROXY}
NO_PROXY: localhost,127.0.0.1,db,redis
db:
image: postgres:17docker inspect shows them. Treat the Docker host like any other place that holds your proxy password.HTTP_PROXY, HTTPS_PROXY, NO_PROXY and ALL_PROXY are predefined build args, so a Dockerfile can use them without an ARG line, and they aren't written into docker history unless you declare them. Use them when apt-get, pip or npm install must reach the internet through a proxy during the build.
docker build \
--build-arg HTTPS_PROXY="http://USERNAME:PASSWORD@HOST:PORT" \
--build-arg HTTP_PROXY="http://USERNAME:PASSWORD@HOST:PORT" \
-t my-scraper .The daemon proxy only affects docker pull and registry traffic, not what your containers send. On Linux, add a proxies object to /etc/docker/daemon.json and restart Docker (sudo systemctl restart docker). Docker Desktop ignores daemon.json proxies: open Settings → Resources → Proxies, choose Manual configuration and fill Web Server (HTTP) and Secure Web Server (HTTPS) with http://HOST:PORT; Docker Desktop asks for the username and password and keeps them in your OS credential store.
{
"proxies": {
"http-proxy": "http://USERNAME:PASSWORD@HOST:PORT",
"https-proxy": "http://USERNAME:PASSWORD@HOST:PORT",
"no-proxy": "localhost,127.0.0.1"
}
}export HTTPS_PROXY="http://USERNAME:PASSWORD@HOST:PORT"
docker run --rm -e HTTPS_PROXY curlimages/curl -s https://api.ipify.org
# see which proxy variables a running container got
docker exec my-scraper env | grep -i proxyRun a throwaway container that prints its exit IP; it should match your proxy, not the Docker host. Run it once without -e to compare.
Open What is my IP? through the proxy to see the address and headers a website receives, or paste up to ten lines into the free proxy checker to test connectivity, latency and exit IP.
Still stuck? Our 24/7 support team answers fast: contact us with the error and the line you used (leave the password out).
config.json.Recreate the container, then check docker exec <name> env | grep -i proxy. If the variables are there, configure the proxy in the app itself (see the Node.js or Python Requests guides).localhost and 127.0.0.1 to NO_PROXY / noProxy.@ or # breaks the proxy URL, or the variable was quoted wrongly in YAML.Percent-encode special characters (@ becomes %40) and keep the value in a .env file instead of inline.Setup guides and best practices from the CleanProxies blog.
Setup guides for tools people run next to Docker.
The -x flag, separate credentials, socks5h for remote DNS, env vars and a loop to test a whole list.
Setup guidehttp_proxy variables in both cases, /etc/environment, apt config and the Ubuntu desktop panel.
Setup guideundici ProxyAgent for fetch, NODE_USE_ENV_PROXY, axios proxy config and SOCKS5 agents.
Setup guideCustom proxy URLs in Actor input, createProxyConfiguration with proxyUrls, and an exit IP check.
Setup guideStraight answers about running CleanProxies in Docker.
Pass HTTPS_PROXY and HTTP_PROXY when you start it, for example docker run -e HTTPS_PROXY=http://USERNAME:PASSWORD@HOST:PORT, or set them for all new containers in the proxies.default section of ~/.docker/config.json.