当前位置: 首页 > 面试题库 >

Docker网络-nginx:在上游找不到[emerg]主机

岳均
2023-03-14
问题内容

我最近开始迁移到Docker 1.9和Docker-Compose 1.5的网络功能,以使用链接进行替换。

到目前为止,链接没有问题,nginx通过docker-compose连接到我的php5-fpm
fastcgi服务器,该服务器位于一组中的另一台服务器中。新近,虽然当我运行docker-compose --x-networking upphp-
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-compose命令,nginx将启动并自此正常运行。

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

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

这是我default.conf的nginx:

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仅与单个docker-compose调用一起使用?


问题答案:

在引入depends_on功能(在下面讨论)之前,可以使用“ volumes_from”作为解决方法。您要做的就是如下更改docker-compose文件:

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,这是不希望的。但是目前,这是可以使用的一种特定于docker的解决方法。

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

有建议在Docker引入的新网络功能中引入“ depends_on”。但是关于相同的@
https://github.com/docker/compose/issues/374一直存在着长期的争论,因此,一旦实现,就可以使用depends_on功能来命令启动容器,但是在此刻,您将不得不采取以下措施之一:

  1. 使nginx重试,直到php服务器启动-我更喜欢这一台
  2. 如上所述,使用volums_from解决方法-由于卷会泄漏到不必要的容器中,因此我将避免使用它。


 类似资料:
  • 我最近开始迁移到Docker1.9和Docker-Compose1.5的网络功能,以取代使用链接。 到目前为止,使用链接,nginx通过docker-compose连接到我的php5-fpm fastcgi服务器(位于一个组中的不同服务器上)没有任何问题。最近,当我运行时,我的php-fpm、mongo和nginx容器启动了,但是nginx却以中的上游“waapi_php_1”中找不到主机而立即退

  • 问题内容: 我在ECS服务器上运行docker-nginx。我的Nginx服务突然停止,因为其中一台服务器的proxy_path无法访问。错误如下: 我的配置文件如下: 配置文件中有很多服务器,即使一台服务器宕机,我也需要运行nginx。有什么办法可以解决? 任何解决此问题的建议将不胜感激。 问题答案: 包含以防止Nginx在您的站点关闭时崩溃,请包含一个resolver指令,如下所示: 警告!使

  • 我有一个 docker 容器,我想给它 --network=host AND -。我需要连接到主机网络才能将主机数据狗服务器 (UDP) 和 网络用于其数据库。 尝试添加这两个网络会导致。 知道正确的处理方法吗?

  • 本文向大家介绍Docker主机网络与网桥网络,包括了Docker主机网络与网桥网络的使用技巧和注意事项,需要的朋友参考一下 可用于Docker网络的单主机网络有两种类型:“主机”和“桥”网络。单主机网络意味着它们的影响对于每个单独的主机都是局部的。 在主机网络的情况下,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于网桥网络,它需要端口映射才能进行通信。 为了更好地理解它们,让

  • 问题内容: 我正在尝试摆脱配置中已弃用的Docker链接。当我重新创建容器时,剩下的就是摆脱那些nginx反向代理错误。 注意:我正在桥接模式下使用Docker网络。() 我在nginx中使用以下配置代码段: 我在Docker网络上以name 为主机名启动了一个容器。 然后,我在网络上启动了Nginx容器。 我可以从Nginx容器内ping 在nginx容器的文件中列出 Nginx日志说 我试过泊

  • 本文向大家介绍Docker 上市网络,包括了Docker 上市网络的使用技巧和注意事项,需要的朋友参考一下 示例 该命令列出了在本地Docker主机上创建的所有网络。它包括默认网桥bridge网络,主机host网络和空null网络。默认情况下,所有容器都连接到默认网桥bridge网络。