Puncte:0

Containerul PHP-FPM Docker se comportă diferit în ceea ce privește motorul (docker-compose vs Swarm)

drapel fr

un container PHP-FPM (7.2), membru al stivei LAPP clasice, expune corect portul 9000 atunci când este lansat cu docker-compune dar nimic atunci când a început de Docker Swarm. Ar trebui să menționez că containerul rulează (a se vedea rezultatul de mai jos) și pot lansa un bash TTY pe el.

Deci cu docker-compune, aplicația web este complet funcțională, dar cu Swarm, Apache emite un serviciu 503 indisponibil. Nu se schimbă nimic între testele cu motoare diferite. Ai vreo idee despre acest comportament?

docker-compose.yml

versiunea: „3.5”
Servicii:
  postgres:
    fişier_env: ./.env
    imagine: "postgres:9.5.24"
    volume:
      - baza de date:/var/lib/postgresql/data
    retele:
      - intern

  administrator:
    imagine: administrator
    retele:
      - intern
      - traefik-public
    implementeaza:
      etichete:
        - "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:
    fişier_env: ./.env
    imagine: visio_rdv_apache:latest
    construi:
      context: docker/images/apache2.4
      dockerfile: Dockerfile
      argumente:
        UID: ${HOST_UID}
        ROOT_URL: ${ROOT_URL}
    porturi:
      - 8000:80
    mediu inconjurator:
      FPM_HOST: php:9000
      ROOT_URL: ${ROOT_URL}
    volume:
      - ${LOGS_DIR}/apache/:/var/log/httpd/
      - ${RELATIVE_APP_PATH}:/var/www/html      
    link-uri:
      - postgres
      - php

    retele:
      - intern
      - traefik-public
    implementeaza:
      etichete:
        - "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:
    fisier_env: .env
    link-uri:
      - ftp
    imagine: visio_rdv_php:latest
    construi:
      context: docker/images/php
      dockerfile: Dockerfile
      argumente:
        UID: ${HOST_UID}
        TIMEZONE: ${TIMEZONE}
        PROXY: ${http_proxy}
    volume:
      - ftp_data:/var/www/ftp:rw
      - ${RELATIVE_APP_PATH}:/var/www/html      
    retele:
      - intern

  ftp:
    fisier_env: .env
    imagine: "fauria/vsftpd:latest"
    porturi:
      - „9520:20”
      - „9521:21”
      - „21100-21110:21100-21110”
    mediu inconjurator:
      FTP_USER: ${FTP_USER}
      FTP_PASS: ${FTP_PASS}      
      PASV_MIN_PORT: 21100
      PASV_MAX_PORT: 21100
    volume:
      - ftp_data:/home/vsftpd/${AUTOMATION_CLIENT_NAME}:rw
    retele:
      - intern

volume:
  ftp_data:
  Bază de date:

retele:
  traefik-public:
    extern: adevărat
  intern:
    extern: fals

Cu Docker Swarm

Jurnalele Apache:

[Mer Aug 04 07:35:16.382246 2021] [proxy:error] [pid 11] (111)Conexiune refuzată: AH00957: FCGI: încercarea de conectare la 10.0.4.93:9000 (*) a eșuat
[Miercuri, 04 august 07:35:16.382314 2021] [proxy_fcgi:error] [pid 11] [client 10.0.0.2:1035] AH01079: nu s-a putut face conexiunea la backend: php, referer: http://test.example.com /

Lista serviciilor Swarm:

serviciul docker ls
ID NUME MOD REPLICA PORTURI IMAGINE
um2txtpz8534 traefik_reverse-proxy replicat 1/1 traefik:v2.4                   
ahf7uukapxbr my_stack_adminer replicat 1/1 adminer:latest                 
ue8qekmg0ff0 my_stack_apache replicat 1/1 my_stack_apache:cel mai recent my_stack*:8000->80/tcp
x9igaslhsx11 my_stack_ftp replicat 1/1 fauria/vsftpd:latest *:9520-9521->20-21/tcp, *:21100-21110->21100-21110/tcp
jpk4qzqs1tfx my_stack_php replicat 1/1 my_stack_php:latest           
ih67rh82vp9e my_stack_postgres replicat 1/1 postgres:9.5.24    

Am încercat să adaug net-instrumente la imaginea PHP, pentru a testa manual conexiunea cu nc. Același rezultat, php IP-ul instanței containerului este corect rezolvat, dar orice conexiune TCP la portul 9000 este refuzată.

Folosesc o mulțime de variabile de mediu și, pentru a atenua caracteristica lipsă cu Swarm, folosesc docker-compose config ieșire de comandă pentru a genera complet docker-compose.yml fişier.

Cu docker-compune

         Denumirea Comandă State Ports                                                                    
--------------------------------------------- --------------------------------------------- --------------------------------------------- --------------------------------------------- --------
my_stack_adminer_1 entrypoint.sh docker-php-e ... Până la 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, .00:21.01, . ->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->210.0.0.0.0.0.0.0. >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 
Puncte:0
drapel in
  1. Cum ai realizat construcția?

Swarm este spre deosebire de docker-compose: "o implementare este o implementare" - și NU o construcție! (trebuie să construiți imaginile înainte de a le implementa - și cele compuse (probabil disponibile) ar putea să nu îndeplinească cerințele...)

Cu:

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

implementați o imagine existentă în roiul selectat (probabil le folosește pe cele pe care le-ați construit prin docker-compose înainte...

... un alt subiect în roi este rețelele: trebuie să fiți conștienți de domeniile de rețea (suprapunere la nivel de grup sau roi - sau domeniul de aplicare al unei rețele „interne” pentru a conecta serviciile selectate ale unui „spațiu de nume” în modul în care o faceți în compunere ...)

... și apoi, desigur, volumele pentru părțile cu stare (baze de date, fișiere pe care utilizatorii le-ar putea încărca) trebuie gestionate într-un mod diferit (de la NFS la glusterFS la Galera la linbit/LINSTOR ...sau cockroachDB doar pentru a numi câteva...), deoarece containerele părților tale apatride ale orchestrei sunt acum distribuite pe multe noduri diferite.

  1. Uneori, adăugarea „portainer” la roiul tău este o idee bună https://www.portainer.io/solutions/docker ...

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.