Symfony две службы в docker конфигурации - PullRequest
0 голосов
/ 08 января 2020

Моя цель - две службы в docker, которые имеют хост (или отдельный порт, как это должно быть лучше подходить) и возможность звонить друг другу. На данный момент у меня простая конфигурация с сервисами twi на symfony, но только одна с виртуальным хостом на nginx. И второй сервис недоступен. Как это должно быть?

это то, что у меня есть

docker -compose.yml

version: '2'
services:
  php:
    build: ./docker/php/
    environment:
      TIMEZONE: Europe/Kiev
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./app:/var/www/app
    working_dir: /var/www/app
    ports:
      - 9002:9000

  sub_app:
    build: ./docker/php/
    environment:
      TIMEZONE: Europe/Kiev
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./sub_app:/var/www/sub_app
    working_dir: /var/www/sub_app
    ports:
      - 9001:9000

  webserver:
    image: nginx:1.11
    depends_on:
      - php
    volumes_from:
      - php
    volumes:
      - ./docker/nginx/app.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - 8080:80

  composer:
    image: composer:1.4
    volumes_from:
      - php
    working_dir: /var/www/app

docker / nginx / app.conf

upstream php-upstream {
    server php:9000;
}

server {
    root /var/www/app/public;
    listen 80;
    server_tokens off;

    location / {
        try_files $uri @rewriteapp;
    }

    location @rewriteapp {
        rewrite ^(.*)$ /index.php/$1 last;
    }

    location ~ ^/index\.php(/|$) {
        fastcgi_pass php-upstream;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTPS off;
    }
}

и докер / php / Dockerfile

FROM php:7.3-fpm

# Install recommended extensions for Symfony
RUN apt-get update && apt-get install -y \
        libicu-dev \
    && docker-php-ext-install \
        intl \
        opcache \
    && docker-php-ext-enable \
        intl \
        opcache

# Permission fix
RUN usermod -u 1000 www-data

и что у меня есть http://127.0.0.1:8080/ -> Symfony Страница приветствия от службы php, от dir app

http://127.0.0.1:9001/ -> ERR_EMPTY_RESPONSE

http://127.0.0.1:9002/ -> ERR_EMPTY_RESPONSE

docker составить пс

docker -составить пс

                Name                              Command               State                Ports            
--------------------------------------------------------------------------------------------------------------
docker-test_composer_1_de8307ec4af2    /docker-entrypoint.sh composer   Exit 0                                
docker-test_php_1_2118a4e10353         docker-php-entrypoint php-fpm    Up       0.0.0.0:9002->9000/tcp       
docker-test_sub_app_1_3c473ac40c77     docker-php-entrypoint php-fpm    Up       0.0.0.0:9001->9000/tcp       
docker-test_webserver_1_b53daccf2f3a   nginx -g daemon off;             Up       443/tcp, 0.0.0.0:8080->80/tcp

в локальном п c когда я проверяю, кто лицензирует порты

lsof -i :8080 -> empty
lsof -i :9001 -> empty
lsof -i :9002 -> empty

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы не указали, откуда вы пытаетесь получить доступ к сервису1. Итак, я отвечу на оба случая:

  1. с хоста,
  2. изнутри docker

Допустим, вы установили docker на windows хосте. В docker - составьте для каждого сервиса, который вы предоставляете, сопоставление портов. Например для службы с именем service1 вы делаете

service1: 
     ports:
        -9001:9000

Здесь 9000 - это порт в service1, который вы хотите отобразить. Этот порт сопоставлен с портом 9001 хоста windows. Теперь вы получаете доступ к service1 из windows, используя -> localhost:9001

Вы получаете доступ к service1 из другого сервиса из docker, используя -> service1:9000

Теперь, чтобы ответить на ваш вопрос, вы может сделать что-то вроде следующего:

service1:
    ports:
       -9001:9000

service2:
    ports:
       -9002:9000

доступ к сервису1 с хоста windows -> localhost:9001

доступ к сервису2 с хоста windows -> localhost:9002

доступ к service1 изнутри docker -> service1:9000

доступ к service2 изнутри docker -> service2:9000

edit:

попробовать это docker - составить файл:

version: '2'
services:
  service1:
    build: ./docker/php/
    environment:
      TIMEZONE: Europe/Kiev
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./service1:/var/www/service1
    working_dir: /var/www/service1
    ports: 
       -8080:80

  service2:
    build: ./docker/php/
    environment:
      TIMEZONE: Europe/Kiev
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./service2:/var/www/service2
    working_dir: /var/www/service2
    ports:
       -8081:80

  webserver:
    image: nginx:1.11
    depends_on:
      - service1
      - service2
    volumes_from:
      - service1
      - service2
volumes:
  - ./docker/nginx/service1.conf:/etc/nginx/sites-enabled/service1.conf:ro
  - ./docker/nginx/service2.conf:/etc/nginx/sites-enabled/service2.conf:ro


  composer_service1:
    image: composer:1.4
    volumes_from:
      - service1
    working_dir: /var/www/service1

  composer_service2:
    image: composer:1.4
    volumes_from:
      - service2
    working_dir: /var/www/service2

networks:
  service1:
  service2:
0 голосов
/ 08 января 2020

Ваши тома и рабочий каталог service2 не совпадают с тем, что есть в nginx config.

Должно быть это, я думаю:

  service2:
    build: ./docker/php/
    environment:
      TIMEZONE: Europe/Kiev
    volumes:
      - ./docker/php/php.ini:/usr/local/etc/php/php.ini:ro
      - ./service2:/var/www/service2
    working_dir: /var/www/service2

Кроме того, проверьте порт, который вы выставляете в Dockerfile.

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