【问题标题】:Why is docker looking in /simple for python packages?为什么 docker 在 /simple 中寻找 python 包?
【发布时间】:2017-08-15 00:40:28
【问题描述】:

我一直在尝试让 django 在 docker 容器中通过 uwsgi 运行。

我在 docker 中运行了 django,它具有内置的 Web 服务器,但现在我已经修改了 requirements.txt 以包含 uwsgi,我不断收到以下错误消息:

连接被“NewConnectionError(”中断后重试(Retry(total=4, connect=None, read=None, redirect=None)):无法建立新连接:[Errno -2] 名称或服务未知',)': /simple/uwsgi/

所以看起来 docker 用于 pip 包的 url 是 /simple,但它是如何改变的?当我第一次创建容器 django 和 psycopg 时下载得很好。

我尝试指定 uwsgi 包的完整 URL,但也没有用。

docker-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

【问题讨论】:

  • 您可以尝试在您的 Web 部件中添加 dns: 8.8.8.8 吗?
  • 嗨扎塔。我今天早些时候尝试过,我忘了更新我的问题。仍然没有运气:(
  • docker run -it --rm --dns 8.8.8.8 python:3.5 pip install uwsgi 运行成功了吗?对于 Compose 中的 dns 部分,如果您使用 Swarm,则会忽略 v3 中的文档状态 dns 选项。
  • 这里有一个解决方法来确保 dns 可以用于 pip。请将 Dockerfile 中的 pip 行替换为:RUN echo nameserver 8.8.8.8 > /etc/resolv.conf && pip install -r requirements.txt
  • 您的docker run 命令成功完成

标签: python-3.x docker pip docker-compose


【解决方案1】:

该错误是由于 pip 无法访问镜像主机。部分/simple/uwsgi 被用作pip url 路径。

doc 中所述,如果您要部署到 Swarm,则 v3 规范将忽略 Compose 中的 DNS 行。这是使 pip 暂时使用不同 DNS 的解决方法,只需将 Dockerfile 中的 pip 行更新为以下内容:

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

希望对您有所帮助。作为一个永久的解决方案,您应该研究如何让您的编排使用自定义 DNS 或针对您的案例从容器中对当前 DNS 进行故障排除。

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 1970-01-01
    • 2010-09-20
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多