Почему docker ищет/просто для пакетов python?

Я пытаюсь запустить django через uwsgi в контейнере докеров.

У меня был django, работающий в докере со встроенным веб-сервером, но теперь, когда я изменил файл требований .txt, включив uwsgi, я продолжаю получать следующее сообщение об ошибке:

Повторная попытка (повторить попытку (итого = 4, connect = None, read = None, redirect = None)) после того, как соединение сломано "NewConnectionError (': Не удалось установить новое соединение: [Errno -2] Имя или услуга неизвестны ',)':/simple/uwsgi/

Итак, похоже, что доклер URL используется для пакетов pip, /simple, но как это изменилось? Когда я впервые создал контейнер django и psycopg, он был загружен отлично.

Я попытался указать полный URL-адрес пакета uwsgi, но это тоже не сработало.

докер-compose.yaml:

version: '3'
services:
  db:
    image: postgres
  web:
    dns: 8.8.8.8
    build: .
    command: uwsgi --http :8000 --module destExp.wsgi
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

Dockerfile:

FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
CMD uwsgi --http :8000 --module destExp.wsgi

Ответ 1

Эта ошибка вызвана тем, что pip не может попасть на зеркальный хост. Часть /simple/uwsgi используется как пиковый URL-адрес.

Строка DNS в Compose игнорируется для спецификации v3, если вы развертываете ее в Swarm, как указано в doc. Ниже приведено обходное решение, чтобы заставить пип использовать разные DNS мгновенно, просто обновите строку вашего пика в файле Dockerfile следующим образом:

RUN echo nameserver 8.8.8.8 > /etc/resolv.conf && pip install -r requirements.txt

Надеюсь, что это поможет. В качестве постоянного решения вам следует изучить, как заставить вашу оркестровку использовать пользовательский DNS или устранить текущий DNS из контейнера для вашего дела.