为什么docker在/ python包中看起来很简单?

Mat*_*len 10 pip python-3.x docker docker-compose

我一直试图让django在一个docker容器中通过uwsgi运行.

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

连接被'NewConnectionError(':无法建立新连接:[Errno -2]名称或服务未知'重试后,重试(重试(总数= 4,连接=无,读取=无,重定向=无)) ':/ simple/uwsgi /

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

我尝试指定uwsgi包的完整URL,但这也不起作用.

泊坞窗,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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

hur*_*urk 6

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

如果您正在部署到Swarm,则会忽略Compose中的DNS行,如文档中所述.这是一个解决方法,使pip暂时使用不同的DNS,只需将Dockerfile中的pip行更新为:

RUN echo nameserver 8.8.8.8 > /etc/resolv.conf && pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.作为永久性解决方案,您应该研究如何使您的业务流程使用自定义DNS或对容器中的当前DNS进行故障排除.