I am trying to build a Docker image for elasticsearch-curator,
Here is the dockerfile:
FROM alpine:3.7
RUN adduser -S curator
RUN apk add --update \
python \
python-dev \
py-pip \
build-base \
&& pip install virtualenv \
&& pip install elasticsearch-curator \
&& rm -rf /var/cache/apk/*
USER curator
ENTRYPOINT [ "/usr/bin/curator"]
Thing is I am under a proxy, so I must build my image with:
docker build --no-cache --build-arg HTTP_PROXY=http://xx.xx.xx.xx:xx -t elasticsearch-curator:5.4 .
But when it wants to get virtualenv, I get:
Collecting virtualenv
Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb8259ed350>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/virtualenv/
Retrying (Retry(total=3, connect=None, read=None, redirect=None)) after connection broken by 'ConnectTimeoutError(<pip._vendor.requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7fb8259ed210>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/virtualenv/
I found people solving issue inserting
ENV http_proxy http://proxy-chain.xxx.com:911/
ENV https_proxy http://proxy-chain.xxx.com:912/
in the Dockerfile, but it is not possible for me, because my proxy is only valid on my building, so if another person from another place want to build the image, he will need to remove http_proxy env var from Dockerfile.
Is there any other way to achieve it? It seems like a very common use case...
I solved it by adding
HTTPS_PROXY
in command line:Don't include the proxy settings in the Dockerfile.
If you have configured the proxy settings correctly on the host machine, you can build the docker image with
--network= host
. This will make the build command use the network settings of the host.I think this is because pip install needs explicit proxy arg.
Try to make an
install.sh
to pip installs.If there's a proxy configured (passed as
build-arg
, i.e. set int the environment), install it with :With env variable:
If not, pip install without proxy.
You can configure all clients proxies via the ~\.docker\config.json file in your home or user directory directory:
The first three entries are there by default, simply add the "proxies" section to your file.
Source: https://docs.docker.com/network/proxy/