pythonpython-3.xdockerdocker-composepypiserver

--extra-index-url is not working in docker file


I have setup local pypiserver using following docker-compose.yml and it is working when i use it directly like

pip install -r requirements.txt --extra-index-url http://127.0.0.1:8082

However, When I try to use same command in Dockerfile, it is not working. Files I have created following files:

Dockerfile:

FROM python:3
ENV PYTHONUNBUFFERED=1
ARG PIP_EXTRA_INDEX_URL
WORKDIR /code
COPY requirements.txt /code/
RUN echo "${PIP_EXTRA_INDEX_URL}"
RUN pip install -r requirements.txt $PIP_EXTRA_INDEX_URL
COPY . /code/

docker-compose.yml

version: "3.9"

services:
  db:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
  web:
    build:
      context: .
      args:
        - PIP_EXTRA_INDEX_URL=http://127.0.0.1:8082/simple/
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8800:8000"
    depends_on:
      - db

When I try to run docker-compose up I am getting following errors:

Looking in indexes: https://pypi.org/simple, http://127.0.0.1:8082/simple/
Collecting http://127.0.0.1:8082/simple/
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f7407596df0>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/
  WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f7407596b20>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/
  WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f74089dcf70>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/
  WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f74089dca60>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/
  WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f74089dcdf0>: Failed to establish a new connection: [Errno 111] Connection refused')': /simple/
ERROR: Could not install packages due to an OSError: HTTPConnectionPool(host='127.0.0.1', port=8082): Max retries exceeded with url: /simple/ (Caused by NewConnectionError('<pip._vendor.urllib3.connection.HTTPConnection object at 0x7f74089dcac0>: Failed to establish a new connection: [Errno 111] Connection refused'))

ERROR: Service 'web' failed to build : The command '/bin/sh -c pip install -r requirements.txt $PIP_EXTRA_INDEX_URL' returned a non-zero code: 1

Is any configuration missing in this code?


Solution

  • 127.0.0.1 will resolve to the container itself inside the container. You have to specify the IP address of the host as seen from the container.

    See e.g. How to get the IP address of the docker host from inside a docker container for how to obtain this information.