Рейтинг:0

Контейнер PHP-FPM Docker ведет себя по-разному в отношении движка (docker-compose vs Swarm)

флаг fr

один контейнер PHP-FPM (7.2), член классического стека LAPP, правильно предоставляет порт 9000 при запуске с docker-compose но ничего при запуске Docker Swarm. Должен ли я упомянуть, что контейнер запущен (см. вывод ниже), и я могу запустить на нем TTY bash.

Так с docker-compose, веб-приложение полностью функционально, но с Swarm Apache выдает ошибку 503 Service Unreachable. Между тестами с разными двигателями ничего не меняется. Есть ли у вас какое-либо представление об этом поведении?

докер-compose.yml

версия: '3.5'
Сервисы:
  постгрес:
    env_file: ./.env
    изображение: "postgres:9.5.24"
    тома:
      - база данных:/var/lib/postgresql/data
    сети:
      - внутренний

  администратор:
    изображение: администратор
    сети:
      - внутренний
      - траефик-общественный
    развертывать:
      этикетки:
        - "traefik.enable=true"
        - "traefik.http.routers.adminer.rule=Хост(`adminer.example.com`)"
        - "traefik.http.routers.adminer.entrypoints=websecure"
        - "traefik.http.routers.adminer.tls.certresolver=letsencryptresolver"
        - "traefik.http.services.adminer.loadbalancer.server.port=8080"
        - "traefik.port=80"

  апач:
    env_file: ./.env
    изображение: visio_rdv_apache: последний
    строить:
      контекст: докер/изображения/apache2.4
      докерфайл: Докерфайл
      аргументы:
        UID: ${HOST_UID}
        ROOT_URL: ${ROOT_URL}
    порты:
      - 8000:80
    среда:
      FPM_HOST: php:9000
      ROOT_URL: ${ROOT_URL}
    тома:
      - ${LOGS_DIR}/apache/:/var/log/httpd/
      - ${RELATIVE_APP_PATH}:/var/www/html      
    ссылки:
      - постгрес
      - пхп

    сети:
      - внутренний
      - траефик-общественный
    развертывать:
      этикетки:
        - "traefik.enable=true"
        - "traefik.http.routers.visio_rdv.rule=Host(`test.example.com`)"
        - "traefik.http.routers.visio_rdv.entrypoints=websecure"
        - "traefik.http.routers.visio_rdv.tls.certresolver=letsencryptresolver"
        - "traefik.http.services.visio_rdv.loadbalancer.server.port=80"
        - "traefik.port=80"

  php:
    env_file: .env
    ссылки:
      - фтп
    изображение: visio_rdv_php: последний
    строить:
      контекст: докер/изображения/php
      докерфайл: Докерфайл
      аргументы:
        UID: ${HOST_UID}
        ЧАСОВОЙ ПОЯС: ${TIMEZONE}
        ПРОКСИ: ${http_proxy}
    тома:
      - ftp_data:/var/www/ftp:rw
      - ${RELATIVE_APP_PATH}:/var/www/html      
    сети:
      - внутренний

  FTP:
    env_file: .env
    изображение: "fauria/vsftpd: последний"
    порты:
      - "9520:20"
      - "9521:21"
      - "21100-21110:21100-21110"
    среда:
      FTP_USER: ${FTP_USER}
      FTP_PASS: ${FTP_PASS}      
      PASV_MIN_PORT: 21100
      PASV_MAX_PORT: 21100
    тома:
      - ftp_data:/home/vsftpd/${АВТОМАТИЧЕСКОЕ_ИМЯ_КЛИЕНТА}:rw
    сети:
      - внутренний

тома:
  ftp_data:
  база данных:

сети:
  traefik-public:
    внешний: правда
  внутренний:
    внешний: ложный

С Docker Swarm

Логи апача:

[Среда, 04 августа, 07:35:16.382246 2021] [прокси:ошибка] [pid 11] (111)Отказ в подключении: AH00957: FCGI: попытка подключения к 10.0.4.93:9000 (*) не удалась
[Среда, 04 августа, 07:35:16.382314 2021] [proxy_fcgi:error] [pid 11] [client 10.0.0.2:1035] AH01079: не удалось установить соединение с серверной частью: php, реферер: http://test.example.com /

Список сервисов Swarm:

докер сервис лс
ID НАЗВАНИЕ РЕЖИМ РЕПЛИКА ИЗОБРАЖЕНИЕ ПОРТЫ
um2txtpz8534 traefik_reverse-proxy реплицирован 1/1 traefik:v2.4                   
ahf7uukapxbr my_stack_adminer реплицирован 1/1 администратор: последний                 
ue8qekmg0ff0 my_stack_apache реплицировано 1/1 my_stack_apache:последний my_stack*:8000->80/tcp
x9igaslhsx11 my_stack_ftp реплицировано 1/1 fauria/vsftpd:последняя *:9520-9521->20-21/tcp, *:21100-21110->21100-21110/tcp
jpk4qzqs1tfx my_stack_php реплицирован 1/1 my_stack_php: последний           
ih67rh82vp9e my_stack_postgres реплицировано 1/1 postgres:9.5.24    

я пытался добавить сетевые инструменты к образу PHP, чтобы вручную проверить соединение с нк. Тот же результат, php IP-адрес экземпляра контейнера разрешен правильно, но любое TCP-соединение с портом 9000 отклонено.

Я использую множество переменных окружения, и чтобы смягчить отсутствующую функцию Swarm, я использую конфигурация для создания докеров вывод команды для создания полного докер-compose.yml файл.

С docker-compose

         Имя порта состояния команды                                                                    
--------------------------------------------- --------------------------------------------- --------------------------------------------- --------------------------------------------- --------
my_stack_adminer_1 entrypoint.sh docker-php-e ... Up 8080/tcp                                                                                                                                     
my_stack_apache_1 /bin/sh -c apachectl -D FO ... Up 0.0.0.0:8000->80/tcp                                                                                                                         
my_stack_ftp_1 /usr/sbin/run-vsftpd.sh Up 0.0.0.0:9520->20/tcp, 0.0.0.0:9521->21/tcp, 0.0.0.0:21100->21100/tcp, 0.0.0.0:21101 ->21101/TCP, 0.0.0.0:21102->21102/TCP,                    
                                                                   0.0.0.0:21103->21103/tcp, 0.0.0.0:21104->21104/tcp, 0.0.0.0:21105->21105/tcp, 0.0.0.0:21106->21106/tcp, 0.0.0.0:21107- >21107/TCP,            
                                                                   0.0.0.0:21108->21108/TCP, 0.0.0.0:21109->21109/TCP, 0.0.0.0:21110->21110/TCP                                                                 
my_stack_php_1 php-fpm -R -F до 9000/tcp                                                                                                                                     
my_stack_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp 
Рейтинг:0
флаг in
  1. Как вы делали сборку?

Swarm отличается от docker-compose: "развертывание есть развертывание" - и НЕ сборка! (вам нужно создать образы перед их развертыванием - и (вероятно, доступные) компоновщики могут не соответствовать требованиям...)

С:

docker stack deploy -c your-compose-style-code.yml <имя-вашего-роя>

вы развертываете существующий образ в выбранный рой (вероятно, он использует те, которые вы создали с помощью docker-compose до...

... еще одна тема в рое - это сеть: вам нужно знать о сетевых областях (наложение кластера или роя - или область «внутренней» сети для подключения выбранных служб «пространства имен» так, как вы это делаете в compose ...)

... и тогда, конечно, тома для stateful-частей (базы данных, файлы, которые могут загружать пользователи) должны управляться другим способом (от NFS до glusterFS, от Galera до linbit/LINSTOR...или cockroachDB, просто чтобы назвать некоторые...), так как контейнеры ваших частей оркестра без сохранения состояния теперь распределены по множеству разных узлов..

  1. Иногда добавление «портейнера» в ваш рой — хорошая идея. https://www.portainer.io/solutions/docker ...

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.