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

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

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

docker -compose.yml

version: '3.5'
services:
  postgres:
    env_file:./.env
    image: "postgres:9.5.24"
    volumes:
      - database:/var/lib/postgresql/data
    networks:
      - internal

  adminer:
    image: adminer
    networks:
      - internal
      - traefik-public
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.adminer.rule=Host(`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"

  apache:
    env_file:./.env
    image: visio_rdv_apache:latest
    build:
      context: docker/images/apache2.4
      dockerfile: Dockerfile
      args:
        UID: ${HOST_UID}
        ROOT_URL: ${ROOT_URL}
    ports:
      - 8000:80
    environment:
      FPM_HOST: php:9000
      ROOT_URL: ${ROOT_URL}
    volumes:
      - ${LOGS_DIR}/apache/:/var/log/httpd/
      - ${RELATIVE_APP_PATH}:/var/www/html      
    links:
      - postgres
      - php

    networks:
      - internal
      - traefik-public
    deploy:
      labels:
        - "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
    links:
      - ftp
    image: visio_rdv_php:latest
    build:
      context: docker/images/php
      dockerfile: Dockerfile
      args:
        UID: ${HOST_UID}
        TIMEZONE: ${TIMEZONE}
        PROXY: ${http_proxy}
    volumes:
      - ftp_data:/var/www/ftp:rw
      - ${RELATIVE_APP_PATH}:/var/www/html      
    networks:
      - internal

  ftp:
    env_file:.env
    image: "fauria/vsftpd:latest"
    ports:
      - "9520:20"
      - "9521:21"
      - "21100-21110:21100-21110"
    environment:
      FTP_USER: ${FTP_USER}
      FTP_PASS: ${FTP_PASS}      
      PASV_MIN_PORT: 21100
      PASV_MAX_PORT: 21100
    volumes:
      - ftp_data:/home/vsftpd/${AUTOMATION_CLIENT_NAME}:rw
    networks:
      - internal

volumes:
  ftp_data:
  database:

networks:
  traefik-public:
    external: true
  internal:
    external: false

С Docker Swarm

Журналы Apache:

[Wed Aug 04 07:35:16.382246 2021] [proxy:error] [pid 11] (111)Connection refused: AH00957: FCGI: attempt to connect to 10.0.4.93:9000 (*) failed
[Wed Aug 04 07:35:16.382314 2021] [proxy_fcgi:error] [pid 11] [client 10.0.0.2:1035] AH01079: failed to make connection to backend: php, referer: http://test.example.com/

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

docker service ls
ID             NAME                    MODE         REPLICAS   IMAGE                          PORTS
um2txtpz8534   traefik_reverse-proxy  replicated   1/1        traefik:v2.4                   
ahf7uukapxbr   my_stack_adminer       replicated   1/1        adminer:latest                 
ue8qekmg0ff0   my_stack_apache        replicated   1/1        my_stack_apache:latest       my_stack*:8000->80/tcp
x9igaslhsx11   my_stack_ftp           replicated   1/1        fauria/vsftpd:latest          *:9520-9521->20-21/tcp, *:21100-21110->21100-21110/tcp
jpk4qzqs1tfx   my_stack_php           replicated   1/1        my_stack_php:latest           
ih67rh82vp9e   my_stack_postgres      replicated   1/1        postgres:9.5.24    

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

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

Сdocker-compose

         Name                        Command               State                                                                       Ports                                                                    
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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                    Up      9000/tcp                                                                                                                                     
my_stack_postgres_1   docker-entrypoint.sh postgres    Up      5432/tcp 
0
задан 9 August 2021 в 10:14
1 ответ
  1. Как вы делали сборку?

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

С помощью:

docker stack deploy -c your-compose-style-code.yml <name-of-your-swarm>

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

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

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

  1. Иногда добавление "портанера" ​​к вашему рою является хорошей идеейhttps://www.portainer.io/solutions/docker...
0
ответ дан 19 October 2021 в 18:59

Теги

Похожие вопросы