首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头联网- nginx:[emerg]主机在上游找不到

问码头联网- nginx:[emerg]主机在上游找不到
EN

Stack Overflow用户
提问于 2015-11-10 20:37:57
回答 19查看 208.6K关注 0票数 137

我最近开始迁移到Docker1.9和Docker 1.5的网络功能,以取代使用链接。

到目前为止,在链接中,nginx连接到我的php5-fpm快速fpm服务器并没有问题,它位于一个组中的另一个服务器中,通过docker-组合。不过,当我运行docker-compose --x-networking up (我的php-fpm、mongo和nginx容器)启动时,nginx立即退出了[emerg] 1#1: host not found in upstream "waapi_php_1" in /etc/nginx/conf.d/default.conf:16。

但是,如果我在php和mongo容器运行(nginx退出)时再次运行docker命令,那么nginx将从那时起启动并正常工作。

这是我的docker-compose.yml文件:

代码语言:javascript
复制
nginx:
  image: nginx
  ports:
    - "42080:80"
  volumes:
    - ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro

php:
  build: config/docker/php
  ports:
    - "42022:22"
  volumes:
    - .:/var/www/html
  env_file: config/docker/php/.env.development

mongo:
  image: mongo
  ports:
    - "42017:27017"
  volumes:
    - /var/mongodata/wa-api:/data/db
  command: --smallfiles

这是我的nginx的default.conf:

代码语言:javascript
复制
server {
    listen  80;

    root /var/www/test;

    error_log /dev/stdout debug;
    access_log /dev/stdout;

    location / {
        # try to serve file directly, fallback to app.php
        try_files $uri /index.php$is_args$args;
    }

    location ~ ^/.+\.php(/|$) {
        # Referencing the php service host (Docker)
        fastcgi_pass waapi_php_1:9000;

        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;

        # We must reference the document_root of the external server ourselves here.
        fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;

        fastcgi_param HTTPS off;
    }
}

我如何才能让nginx只使用一个码头-撰写电话?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2015-11-28 02:31:29

在引入volumes_from特性之前,有可能使用“depends_on”作为解决方案。您所要做的就是更改您的坞-撰写文件如下:

代码语言:javascript
复制
nginx:
  image: nginx
  ports:
    - "42080:80"
  volumes:
    - ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
  volumes_from:
    - php

php:
  build: config/docker/php
  ports:
    - "42022:22"
  volumes:
    - .:/var/www/html
  env_file: config/docker/php/.env.development

mongo:
  image: mongo
  ports:
    - "42017:27017"
  volumes:
    - /var/mongodata/wa-api:/data/db
  command: --smallfiles

上述方法中的一个重要警告是,php的卷暴露在nginx中,这是不需要的。但就目前而言,这是一个特定的解决方案,可以使用。

depends_on --这可能是一个未来主义的答案。因为该功能尚未在Docker中实现(从1.9开始)

有人建议在Docker引入的新的网络特性中引入"depends_on“。但是,对于相同的@ https://github.com/docker/compose/issues/374,有一个长期的争论,因此,一旦实现了它,就可以使用特性depends_on来命令容器启动,但是目前,您必须使用以下方法之一:

  1. 让nginx重试直到php服务器关闭-我更喜欢这个
  2. 如上文所述,使用volums_from解决方案--我将避免使用此方法,因为卷泄漏到了不必要的容器中。
票数 27
EN

Stack Overflow用户

发布于 2016-08-19 13:05:35

这可以通过上面提到的depends_on指令来解决,因为它现在已经实现(2016年):

代码语言:javascript
复制
version: '2'
  services:
    nginx:
      image: nginx
      ports:
        - "42080:80"
      volumes:
        - ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      depends_on:
        - php

    php:
      build: config/docker/php
      ports:
        - "42022:22"
      volumes:
        - .:/var/www/html
      env_file: config/docker/php/.env.development
      depends_on:
        - mongo

    mongo:
      image: mongo
      ports:
        - "42017:27017"
      volumes:
        - /var/mongodata/wa-api:/data/db
      command: --smallfiles

成功地测试了:

代码语言:javascript
复制
$ docker-compose version
docker-compose version 1.8.0, build f3628c7

在文档中可以找到更多细节。

还有一篇关于这个主题的非常有趣的文章:组合控制启动顺序

票数 52
EN

Stack Overflow用户

发布于 2018-02-14 04:21:25

如果你如此迷茫,请阅读最后一条评论。我已经找到了另一个解决办法。

主要问题是您命名服务名称的方式。

在这种情况下,如果在您的docker-compose.yml中,php的服务被称为"api“或类似的东西,那么您必须确保在文件nginx.conf中,以fastcgi_pass开头的行与php服务具有相同的名称。即fastcgi_pass api:9000;

假设php服务名为php_service,那么代码如下:

在文件docker-compose.yml中

代码语言:javascript
复制
php_service:
    build:
        dockerfile: ./docker/php/Dockerfile

在文件nginx.conf中

代码语言:javascript
复制
location ~ \.php$ {
    fastcgi_pass php_service:9000;
    fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
    include fastcgi_params; 
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33639138

复制
相关文章

相似问题

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