Score:0

PHP-FPM Docker container ทำงานแตกต่างกันเกี่ยวกับเครื่องยนต์ (docker-compose vs Swarm)

ธง fr

คอนเทนเนอร์ PHP-FPM หนึ่งรายการ (7.2) ซึ่งเป็นสมาชิกของสแต็ก LAPP แบบคลาสสิก เปิดเผยพอร์ต 9000 อย่างถูกต้องเมื่อเปิดใช้งานด้วย นักเทียบท่าเขียน แต่ไม่มีอะไรเมื่อเริ่มต้นโดย Docker Swarm. ฉันควรพูดถึงว่าคอนเทนเนอร์กำลังทำงานอยู่ (ดูผลลัพธ์ด้านล่าง) และฉันสามารถเปิด TTY bash ได้

ดังนั้นด้วย นักเทียบท่าเขียนเว็บแอปพลิเคชันทำงานได้อย่างสมบูรณ์ แต่ด้วย Swarm ทำให้ Apache ออก 503 Service Unavailable ไม่มีอะไรเปลี่ยนแปลงระหว่างการทดสอบกับเครื่องยนต์ต่างๆ คุณมีเงื่อนงำเกี่ยวกับพฤติกรรมนี้หรือไม่?

นักเทียบท่า-compose.yml

รุ่น: '3.5'
บริการ:
  โพสต์เกรส:
    env_file: ./.env
    ภาพ: "postgres:9.5.24"
    ปริมาณ:
      - ฐานข้อมูล:/var/lib/postgresql/data
    เครือข่าย:
      - ภายใน

  ผู้ดูแลระบบ:
    ภาพ : แอดมิน
    เครือข่าย:
      - ภายใน
      - traefik สาธารณะ
    ปรับใช้:
      ป้ายกำกับ:
        - "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"

  อาปาเช่:
    env_file: ./.env
    รูปภาพ: visio_rdv_apache: ล่าสุด
    สร้าง:
      บริบท: นักเทียบท่า/รูปภาพ/apache2.4
      นักเทียบท่าไฟล์: Dockerfile
      หาเรื่อง:
        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      
    ลิงค์:
      - โพสเกรส
      - php

    เครือข่าย:
      - ภายใน
      - traefik สาธารณะ
    ปรับใช้:
      ป้ายกำกับ:
        - "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.ini
      นักเทียบท่าไฟล์: Dockerfile
      หาเรื่อง:
        UID: ${HOST_UID}
        เขตเวลา: ${TIMEZONE}
        พร็อกซี: ${http_proxy}
    ปริมาณ:
      - ftp_data:/var/www/ftp:rw
      - ${RELATIVE_APP_PATH}:/var/www/html      
    เครือข่าย:
      - ภายใน

  ftp:
    env_file: .env
    รูปภาพ: "fauria/vsftpd:latest"
    พอร์ต:
      - "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/${AUTOMATION_CLIENT_NAME}:rw
    เครือข่าย:
      - ภายใน

ปริมาณ:
  ftp_data:
  ฐานข้อมูล:

เครือข่าย:
  traefik สาธารณะ:
    ภายนอก: จริง
  ภายใน:
    ภายนอก: เท็จ

ด้วย Docker Swarm

บันทึก Apache:

[วันพุธที่ 04 ส.ค. 07:35:16.382246 2021] [proxy:error] [pid 11] (111)การเชื่อมต่อถูกปฏิเสธ: AH00957: FCGI: พยายามเชื่อมต่อกับ 10.0.4.93:9000 (*) ล้มเหลว
[วันพุธที่ 04 ส.ค. 07:35:16.382314 2021] [proxy_fcgi:ข้อผิดพลาด] [pid 11] [ไคลเอนต์ 10.0.0.2:1035] AH01079: ไม่สามารถเชื่อมต่อกับแบ็กเอนด์: php, ผู้อ้างอิง: http://test.example.com /

รายการบริการฝูง:

บริการนักเทียบท่า ls
ID NAME MODE จำลองพอร์ตรูปภาพ
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:latest *:9520-9521->20-21/tcp, *:21100-21110->21100-21110/tcp
jpk4qzqs1tfx my_stack_php จำลองแบบ 1/1 my_stack_php:latest           
ih67rh82vp9e my_stack_postgres จำลองแบบ 1/1 postgres:9.5.24    

ฉันพยายามเพิ่ม เครื่องมือสุทธิ ไปที่อิมเมจ PHP เพื่อทดสอบการเชื่อมต่อกับ เอ็นซี. ผลลัพธ์เดียวกัน php.ini IP อินสแตนซ์คอนเทนเนอร์ได้รับการแก้ไขอย่างถูกต้อง แต่การเชื่อมต่อ TCP กับพอร์ต 9000 ถูกปฏิเสธ

ฉันใช้ vars สภาพแวดล้อมจำนวนมาก และเพื่อบรรเทาคุณลักษณะที่ขาดหายไปด้วย Swarm ฉันจึงใช้ การกำหนดค่านักเทียบท่าเขียน เอาต์พุตคำสั่งเพื่อสร้างเสร็จสมบูรณ์ นักเทียบท่า-compose.yml ไฟล์.

กับ นักเทียบท่าเขียน

         ชื่อ Command State Ports                                                                    
--------------------------------------------- --------------------------------------------- --------------------------------------------- --------------------------------------------- --------
my_stack_adminer_1 entrypoint.sh นักเทียบท่า-php-e ... เพิ่มขึ้น 8080/tcp                                                                                                                                     
my_stack_apache_1 /bin/sh -c apachectl -D FO ... เพิ่มขึ้น 0.0.0.0:8000->80/tcp                                                                                                                         
my_stack_ftp_1 /usr/sbin/run-vsftpd.sh เพิ่มขึ้น 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 เพิ่มขึ้น 5432/tcp 
Score:0
ธง in
  1. คุณสร้างอย่างไร

Swarm ไม่เหมือนกับนักเทียบท่าที่เขียน: "การปรับใช้คือการปรับใช้" - และ ไม่ใช่งานสร้าง! (คุณต้องสร้างอิมเมจก่อนที่จะปรับใช้ - และ (อาจมี) คอมไพล์อิมเมจ 'อาจไม่ตรงตามข้อกำหนด...)

กับ:

นักเทียบท่าสแต็คปรับใช้ -c your-compose-style-code.yml <name-of-your-swarm>

คุณกำลังปรับใช้อิมเมจที่มีอยู่ในกลุ่มที่เลือก (มีแนวโน้มว่าจะใช้อิมเมจที่คุณสร้างผ่าน docker-compose ก่อน...

... หัวข้ออื่นในกลุ่มคือเครือข่าย: คุณต้องตระหนักถึงขอบเขตเครือข่าย (การซ้อนทับคลัสเตอร์หรือฝูงกว้าง - หรือขอบเขตของเครือข่าย "ภายใน" เพื่อเชื่อมต่อบริการที่เลือกของ "เนมสเปซ" วิธีที่คุณทำในการเขียน ...)

... และแน่นอน ปริมาณสำหรับ stateful-parts (ฐานข้อมูล ไฟล์ที่ผู้ใช้อาจอัปโหลด) จำเป็นต้องได้รับการจัดการด้วยวิธีอื่น (จาก NFS ถึง glusterFS ถึง Galera ถึง linbit/LINSTOR ...หรือ cockroachDB เพียงเพื่อบอกชื่อ ... ) เนื่องจากตอนนี้คอนเทนเนอร์ของชิ้นส่วนไร้สัญชาติของคุณในวงออเคสตราถูกกระจายไปตามโหนดต่างๆ มากมาย..

  1. บางครั้งการเพิ่ม "portainer" ให้กับฝูงของคุณก็เป็นความคิดที่ดี https://www.porttainer.io/solutions/docker ...

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา