首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nginx上游不适用于docker部署堆栈

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

Stack Overflow用户
提问于 2019-03-23 21:24:24
回答 1查看 1.6K关注 0票数 5

我正试图用码头部署一个堆栈。

下面是我的堆栈的工作方式:

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

这是我的船坞-合成人. This:

代码语言:javascript
运行
复制
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

当我使用码头-组成时,一切都很好。但是,当我尝试使用进行部署时,部署--compose=docker-come.ymlprod。我的nginx配置文件找不到不同的上游

这是我的服务nginx-api提供的错误。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
    }
}

如果你发现我的配置有问题,或者我能做的更好,请告诉我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-24 18:44:39

之所以发生这种情况,是因为nginx-api服务在api服务之前就已启动。

但是我添加了depends_on 选项?

您是对的,这个选项应该适用于docker-compose up案例。但不幸的是,没有出现在docker stack deploy上,也没有像文档所说的那样:

在部署具有版本3组合文件的群集模式中的堆栈时,将忽略depends_on选项。

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

没什么。其实不是虫子-

码头群节点(您的堆栈服务)应该在错误时自动恢复。(这就是为什么定义restart: always选项的原因)。所以不管怎么说,这对你都有用。

如果您只使用撰写文件来部署堆栈,而不是在docker-compose up上使用--您可以完全删除depends_on选项,这对停靠堆栈没有任何意义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55318546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档