docker составить несколько проектов - PullRequest
0 голосов
/ 09 января 2020

Я хочу настроить локальный DOCKER env для нескольких проектов в одной сети. Я хочу иметь основной docker -компонентный файл конфигурации, который создаст Nginx прокси и PHP контейнер И многие дочерние docker -составляют файлы со своими Nginx. Я хочу, чтобы все дочерние Nginx контейнеры слушали основной PHP контейнер. Но по какой-то причине дочерние Nginx контейнеры перестали работать с ошибкой host not found in upstream "app-php" in /etc/nginx/vhost.d/site.cong25

main docker-compose:

version: '3.5'

services:
  app-nginx_proxy:
    build: ./nginx-proxy
    image: app/nginx-proxy:latest
    container_name: app-nginx_proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    networks:
      - appnetwork
  app-php:
    image: app/php:latest
    container_name: app-php
    build:
      context: ./php-fpm
      dockerfile: Dockerfile
    expose:
      - 9000
    volumes:
      - app_volume:/var/www/
    networks:
      - appnetwork
volumes:
  app_volume:
    driver: local
    driver_opts:
      type: bind
      device: "$PWD/../services"
      o: bind
networks:
  appnetwork:
    driver: bridge

и дочерними docker-compose:

version: '3.5'

services:
  app-admin-nginx:
    build: ./nginx
    image: app-admin/nginx:latest
    container_name: app-admin-nginx
    volumes:
      - app_admin_volume:/var/www/app-admin
    networks:
      appnetwork:
        aliases:
          - app-admin.v2.local
    environment:
      - VIRTUAL_HOST=app-admin.v2.local
volumes:
  app_admin_volume:
    driver: local
    driver_opts:
      type: bind
      device: "$PWD/../services/app-admin"
      o: bind
networks:
  appnetwork:
    external: true

также, site.conf:

server {
    listen 80;
    server_name app-admin.v2.local;

    root /var/www/app-admin/web;

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log /var/log/nginx/abboom_admin_error.log;
    access_log /var/log/nginx/abboom_admin_access.log;

    error_page 404 /index.php;

    sendfile off;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app-php:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
    }

    location ~ /\.ht {
        deny all;
    }
}

Если я перенесу все конфиги в один файл docker-compose, все будет работать нормально, но использование одного файла не будет гибким, так как я хочу добавить возможность для разработчики запускают только те приложения, которые им нужны, а не все приложения, которые у нас есть

1 Ответ

1 голос
/ 09 января 2020

Ваш основной контейнер nginx зависит от службы app-php. Вам нужно начать app-php до nginx.

Также необходимо убедиться, что обе службы работают в одном проекте, чтобы они использовали одну и ту же сеть. Вы можете использовать -p опцию docker -compose.

https://docs.docker.com/compose/reference/overview/

Использование: docker -compose [-f ...] [опции] [КОМАНДА] [АРГС ...]
docker -compose -h | --help

Параметры: -f, --file ФАЙЛ Укажите альтернативный файл композиции (по умолчанию: docker -compose.yml)
-p , --project-name NAME Укажите альтернативное имя проекта (по умолчанию: имя каталога)

Вы также можете использовать пользовательскую сеть для запуска службы из разных файлов в одной сети.

https://docs.docker.com/compose/networking/#specify -custom-сети

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