Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker nginx仅在端口80上提供文件_Docker_Nginx_Docker Compose_Gunicorn - Fatal编程技术网

Docker nginx仅在端口80上提供文件

Docker nginx仅在端口80上提供文件,docker,nginx,docker-compose,gunicorn,Docker,Nginx,Docker Compose,Gunicorn,我已经将django应用程序与gunicorn和nginx对接。应用程序本身可以在以下位置工作,但没有静态/媒体文件,错误: 172.24.0.1---[08/May/2019:13:25:50+0000]“GET/static/js/master.js HTTP/1.1”40477http://127.0.0.1:8000/“ 如果我尝试访问端口80上的文件,它们就可以正常使用 Dockerfile: FROM python:3.6-alpine RUN apk --update add \

我已经将django应用程序与gunicorn和nginx对接。应用程序本身可以在以下位置工作,但没有静态/媒体文件,错误:

172.24.0.1---[08/May/2019:13:25:50+0000]“GET/static/js/master.js HTTP/1.1”40477http://127.0.0.1:8000/“

如果我尝试访问端口80上的文件,它们就可以正常使用

Dockerfile:

FROM python:3.6-alpine

RUN apk --update add \
    build-base \
    postgresql \
    postgresql-dev \
    libpq \
    # pillow dependencies
    jpeg-dev \
    zlib-dev

RUN mkdir /www
WORKDIR /www
COPY requirements.txt /www/
RUN pip install -r requirements.txt

ENV PYTHONUNBUFFERED 1

COPY . /www/
docker-compose.yml

version: "3"
services:
  web:
    build: .
    restart: on-failure
    volumes:
      - .:/www
    env_file:
      - ./.env
    command: >
      sh -c "python manage.py collectstatic --noinput &&
      gunicorn --bind 0.0.0.0:8000 portfolio.wsgi:application --access-logfile '-'"
    expose:
      - "8000"
    ports:
      - "8000:8000"
  nginx:
    image: "nginx"
    restart: always
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./static:/var/www/portfolio/static
      - ./media:/var/www/portfolio/media
    links:
      - web
    ports:
      - "80:80"
nginx.conf

server {
  listen 80;
  server_name 127.0.0.1;

  # serve static files
  location /static/ {
    root /var/www/portfolio;
  }

  # serve media files
  location /media/ {
    root /var/www/portfolio;
  }

  # pass requests for dynamic content to gunicorn
  location / {
    pproxy_pass http://web:8000;
    proxy_set_header Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
  }

我想要的是在127.0.0.1上用我的web应用加载静态和媒体文件。在我看来,
proxy\u pass
可能有问题,但我无法解决


有什么想法吗?

这似乎是罪魁祸首:
proxy\u passhttp://127.0.0.1:8000;

该行使Nginx在Nginx容器内的端口
8000
上查找服务
localhost
/
127.0.0.1
在容器中始终表示“容器本身”,而不是Docker主机

您正在同一Docker网络中运行这两个服务,因此这应该适用于您:


proxy\u passhttp://web:8000;

我看到您正在运行两个容器,nginx无法连接到python容器,因为您提供的ip地址绑定到容器内部。您可能需要添加额外的主机:在docker compose中添加到nginx部件,在该部件上,它将能够连接到其他容器。

如果在nginx中设置nice logging,您将意识到它没有在127.0.0.1上运行,因为它是一个compose服务。因此,您需要查看compose网络在哪个IP上运行,这就是您找到nginx的地方。

有什么建议吗?“我想要的是在127.0.0.1:8000上用我的web应用加载静态和媒体文件。”我真的不明白这一点。Nginx不是用于反向代理的吗,所以您不必转到
web
服务的这个端口,只需
http://localhost/
?@bellackn你完全正确。我被弄糊涂了,我已经厌倦了让这个东西工作,以至于我希望带有所有文件的web应用程序会出现在8000端口,而不是80端口。现在开始工作了,谢谢你,哈哈,很高兴你成功了。:)