Несколько Nginx + PHP контейнер - PullRequest
0 голосов
/ 17 мая 2018

У меня есть такая конфигурация: - 1 докер Nginx (dev) + 1 докер Php (dev) - 1 докер Nginx (prod) + 1 докер Php (pro)

Я использую traefik и docker-compose.Проблема в том, что я не могу подключить док-станцию ​​dev php к док-станции dev nginx ... У меня "Файл не найден".Ошибка.Это означает, что nginx не может найти конфигурацию fastcgi.

Вот мой docker-compose:

version: '3'
networks:
  proxy:
    external: true
  internal:
    external: false
services:
  mysql:
    image: 'mysql:5.7'
    environment:
      MYSQL_ROOT_PASSWORD: null
    ports:
      - "3306:3306"
    networks:
      - internal
    labels:
      - traefik.enable=false
  portainer:
    image: portainer/portainer
    networks:
      - internal
      - proxy
    labels:
      - "traefik.frontend.rule=Host:portainer.xxx.xyz"
      - "traefik.port=9000"
      - "traefik.backend=portainer"
      - traefik.docker.network=proxy
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    restart: unless-stopped
  Nginx-Pro:
    image: nginx:alpine
    build:
      context: .
      dockerfile: Dockerfile_Nginx
    container_name: Nginx-Pro
    labels:
      - traefik.backend=Nginx-Pro
      - traefik.frontend.rule=Host:xxx.fr,www.xxx.fr, yyy.fr, www.yyy.fr
      - traefik.docker.network=proxy
      - traefik.frontend.passHostHeader=true
      - "traefik.port=80"
      - "traefik.frontend.entryPoints=http,https"
    networks:
      - internal
      - proxy
    depends_on:
      - mysql
    volumes:
      - /var/www/nginx-pro/:/usr/share/nginx/
      - /etc/nginx/nginx-pro/:/etc/nginx/
    links:
      - php-pro
  Nginx-Dev:
    image: nginx:alpine
    build:
      context: .
      dockerfile: Dockerfile_Nginx
    container_name: Nginx-Dev
    labels:
      - traefik.backend=Nginx-Dev
      - traefik.frontend.rule=Host:trombi.xxx.xyz
      - traefik.docker.network=proxy
      - traefik.frontend.passHostHeader=true
      - "traefik.port=80"
      - "traefik.frontend.entryPoints=http,https"
    networks:
      - internal
      - proxy
    depends_on:
      - mysql
    volumes:
      - /var/www/nginx-dev/:/usr/share/nginx/
      - /etc/nginx/nginx-dev/:/etc/nginx/
    links:
      - php-dev
  php-pro:
    container_name: php-pro
    image: php:7.2-fpm-alpine3.7
    build:
      context: .
      dockerfile: Dockerfile_PHP
    labels:
      - traefik.docker.network=proxy
      - "traefik.port=9000"
    networks:
      - internal
      - proxy
    volumes:
      - /var/www/nginx-pro/:/usr/share/nginx/
  php-dev:
    image: php:7.2-fpm-alpine3.7
    container_name: php-dev
    build:
      context: .
      dockerfile: Dockerfile_PHP
    labels:
      - traefik.docker.network=proxy
      - "traefik.port=9001"
    ports:
      - 9001:9000
    networks:
      - internal
      - proxy
    volumes:
      - /var/www/nginx-dev/:/usr/share/nginx/

Вот мой php conf для сайта:

server {
   listen       80;
   server_name  trombi.xxx.xyz www.trombi.xxx.xyz;

   #charset koi8-r;
   #access_log  /var/log/nginx/log/host.access.log  main;


    location / {
       root   /usr/share/nginx/trombi.xxx.xyz;
       index  index.html index.htm index.php;
       try_files $uri $uri/ /index.php$is_args$args;
     }

   #error_page  404              /404.html;

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
       root   /usr/share/nginx/html;
   }

   # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   #    proxy_pass   http://127.0.0.1;
   #}

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #
   location ~* \.PHP$ {
        fastcgi_index   index.php;
        fastcgi_pass    php:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    /usr/share/nginx/trombi.xxx.xyz/$fastcgi_script_name;
    }
}

И эта ошибка в логах:

2018/05/17 06:59:47 [error] 8#8: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.19.0.5, server: trombi.xxx.xyz, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://172.20.0.4:9000", host: "trombi.xxx.xyz"
    172.19.0.5 - 
- [17/May/2018:06:59:47 +0000] "GET /info.php HTTP/1.1" 404 47 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.97"

Спасибо за вашу помощь :) Я не могу найти, откуда она взялась ...


UDPATE:Благодаря @Constantin Galbenu Juste нужно изменить в nginx conf:

fastcgi_pass    php:9000;

на:

fastcgi_pass    php-dev:9000;

1 Ответ

0 голосов
/ 18 мая 2018

В docker-compose сервисы доступны по их названию. Docker автоматически разрешит IP-адрес службы (вам не нужно использовать IP-адреса).

В вашем случае имя PHP службы - php-dev, а не просто php.

Решение состоит в том, чтобы заменить fastcgi_pass php:9000; на fastcgi_pass php-dev:9000;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...