gpt4 book ai didi

docker - Nginx 上游不适用于 docker 部署堆栈

转载 作者:行者123 更新时间:2023-12-01 15:01:35 25 4
gpt4 key购买 nike

我正在尝试使用 docker 部署堆栈。

这是我的堆栈的工作原理:

  • nginx-proxy(将用户请求重定向到好的容器)
  • 网站(简单的 nginx 服务网站)
  • api(django 应用程序,使用 gunicorn 启动)
  • nginx-api(提供静态文件和上传的文件,如果是端点,则重定向到 API 容器)

  • 这是我的 docker-compose.yml:
    version: '3.2'

    services:
    website:
    container_name: nyl2pronos-website
    image: nyl2pronos-website
    restart: always
    build:
    context: nyl2pronos_webapp
    dockerfile: Dockerfile
    volumes:
    - ./logs/nginx-website:/var/log/nginx
    expose:
    - "80"
    deploy:
    replicas: 10
    update_config:
    parallelism: 5
    delay: 10s

    api:
    container_name: nyl2pronos-api
    build:
    context: nyl2pronos_api
    dockerfile: Dockerfile
    image: nyl2pronos-api
    restart: always
    ports:
    - 8001:80
    expose:
    - "80"
    depends_on:
    - db
    - memcached
    environment:
    - DJANGO_PRODUCTION=1
    volumes:
    - ./data/api/uploads:/code/uploads
    - ./data/api/static:/code/static

    nginx-api:
    image: nginx:latest
    container_name: nyl2pronos-nginx-api
    restart: always
    expose:
    - "80"
    volumes:
    - ./data/api/uploads:/uploads
    - ./data/api/static:/static
    - ./nyl2pronos_api/config:/etc/nginx/conf.d
    - ./logs/nginx-api:/var/log/nginx
    depends_on:
    - api

    nginx-proxy:
    image: nginx:latest
    container_name: nyl2pronos-proxy
    restart: always
    ports:
    - 80:80
    - 443:443
    volumes:
    - ./proxy:/etc/nginx/conf.d
    - /etc/letsencrypt:/etc/letsencrypt
    - ./logs/nginx-proxy:/var/log/nginx
    deploy:
    placement:
    constraints: [node.role == manager]
    depends_on:
    - nginx-api
    - website

    当我使用 docker-compose up 一切正常。
    但是当我尝试使用 进行部署时docker stack deploy --compose-file=docker-compose.yml prod .我的 nginx 配置文件找不到不同的 上游 .

    这是我的服务提供的错误 nginx-api :
    2019/03/23 17:32:41 [emerg] 1#1: host not found in upstream "api" in /etc/nginx/conf.d/nginx.conf:2

    见下面我的 nginx.conf :
    upstream docker-api {
    server api;
    }

    server {
    listen 80;
    server_name xxxxxxxxxxxxxx;

    location /static {
    autoindex on;
    alias /static/;
    }

    location /uploads {
    autoindex on;
    alias /uploads/;
    }

    location / {
    proxy_pass http://docker-api;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
    }
    }


    如果您发现我的配置有问题或我可以做得更好,请告诉我!

    最佳答案

    这是因为 nginx-api api之前服务是up服务。

    但我添加了 depends_on选项?

    你是对的,这个选项应该适用于 docker-compose up案件。
    但不幸的是不在 docker stack deploy ,或者,作为 docs把它:

    The depends_on option is ignored when deploying a stack in swarm mode with a version 3 Compose file.



    好的,那我现在能做什么?

    没有。它实际上不是一个错误-

    docker swarm 节点(您的堆栈服务)应该在出错时自动恢复。 (这就是您定义 restart: always 选项的原因)。所以无论如何它应该对你有用。

    如果您仅将撰写文件用于部署堆栈而不是用于 docker-compose up - 您可以删除 depends_on选项完全,这对 docker stack 没有任何意义。

    关于docker - Nginx 上游不适用于 docker 部署堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55318546/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com