Score:2

Nginx Docker Container หยุดทำงานผิดปกติ

ธง cn

เซิฟเวอร์:

ฉันใช้ Nginx เป็น ingress-proxy สำหรับเซิร์ฟเวอร์ของฉัน Nginx ทำงานภายในคอนเทนเนอร์ Docker

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

 nginx_ingress:
    ภาพ: nginx: ล่าสุด
    พอร์ต:
      - "80:80"
      - "443:443"
    เครือข่าย:
      ระดับแนวหน้า: {}
      ชั้นหลัง:
        ipv4_address: 172.28.1.1
    รีสตาร์ท: เสมอ
    ปริมาณ:
      - /var/lib/my-server/config/nginx_ingress:/etc/nginx/conf.d
      - /var/lib/my-server/data/certbot/conf:/etc/letsencrypt
      - /var/lib/my-server/data/certbot/www:/var/www/certbot
    คำสั่ง: "/bin/sh -c ' while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

เนื่องจากฉันจัดการใบรับรองหลายใบด้วยคอนเทนเนอร์อื่น ฉันจึงต้องการให้ Nginx โหลดการกำหนดค่าใหม่ทุกๆ 6 ชั่วโมงอย่างสง่างาม

แนวคิดคือฉันสามารถจัดการใบรับรองทั้งหมดของฉันโดยไม่ขึ้นกับคอนเทนเนอร์อื่น ฉันไม่ต้องการให้สิ่งใดทำงานบนโฮสต์ของฉัน (ไม่มี cronjob) และฉันไม่ต้องการรวม nginx-proxy-container กับคอนเทนเนอร์ใบรับรองของฉัน ฉันต้องการให้จิ๊กซอว์ทุกชิ้นทำงานอย่างอิสระ (ฉันได้แนวคิดจากบทช่วยสอนนี้: https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71)

ปัญหา:

บางครั้งพร็อกซี (nginx) หยุดทำงาน ในขณะที่คอนเทนเนอร์ Docker นั้นทำงานต่อไป

บันทึกแสดงสิ่งต่อไปนี้:

...
25/2021/10 05:51:42 [ประกาศ] 1#1: รับสัญญาณ 3 (SIGQUIT) กำลังปิด
25/10/2021 05:51:42 [ประกาศ] 12#12: ปิดตัวลงอย่างสวยงาม
25/2021/10 05:51:42 [ประกาศ] 12#12: กำลังออก
25/10/2021 05:51:42 [ประกาศ] 13#13: ปิดตัวลงอย่างสง่างาม
25/10/2021 05:51:42 [ประกาศ] 12#12: ออก
25/10/2021 05:51:42 [ประกาศ] 13#13: กำลังออก
25/10/2021 05:51:42 [ประกาศ] 13#13: ออก
25/10/2021 05:51:42 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 12
25/10/2021 05:51:42 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 12 ออกด้วยรหัส 0
25/10/2021 05:51:42 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 13 ออกด้วยรหัส 0
25/10/2021 05:51:42 [ประกาศ] 1#1: ออก
25/10/2021 05:51:44 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
25/10/2021 05:51:44 [ประกาศ] 1#1: nginx/1.21.3
25/10/2021 05:51:44 [ประกาศ] 1#1: สร้างโดย gcc 8.3.0 (Debian 8.3.0-6) 
25/10/2021 05:51:44 [ประกาศ] 1#1: OS: Linux 5.4.0-86-generic
25/10/2021 05:51:44 [ประกาศ] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
25/10/2021 05:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
25/10/2021 05:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 9
25/10/2021 05:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 10

กับ บางครั้ง ฉันหมายถึงบางครั้ง ฉันไม่สามารถสร้างรูปแบบใด ๆ ได้จนถึงตอนนี้ ก่อนอื่นฉันคิดว่า Nginx ปิดตัวลงทุก ๆ 6 ชั่วโมงเพราะ สั่งการ. แต่ดูเหมือนว่าจะไม่เป็นเช่นนั้น ฉันลดเวลาพักเครื่องลงเหลือ 2 นาทีและ Nginx ก็ทำงานได้ดีเป็นเวลาหลายชั่วโมง จากนั้นฉันตั้งเวลาสลีปอีกครั้งเป็น 6 ชั่วโมงและอีก 6 ชั่วโมงต่อมา Nginx ก็หยุดทำงาน (ดูบันทึกด้านบน) ฉันรีสตาร์ทคอนเทนเนอร์ Docker และตั้งแต่นั้นมา Nginx ก็กำลังทำงาน (ผ่านไปเกิน 24 ชั่วโมงแล้ว) ดังที่คุณเห็นในบันทึกต่อไปนี้ ในกรณีส่วนใหญ่การโหลดซ้ำของ Nginx จะทำงานได้ดีอย่างสมบูรณ์:

...
25/10/2021 11:51:44 [ประกาศ] 19#19: เริ่มกระบวนการส่งสัญญาณ
25/2021/10 11:51:44 [ประกาศ] 1#1: สัญญาณ 1 (SIGHUP) ได้รับจาก 19, กำหนดค่าใหม่
25/10/2021 11:51:44 [ประกาศ] 1#1: การกำหนดค่าใหม่
25/10/2021 11:51:44 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
25/10/2021 11:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
25/10/2021 11:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 21
25/10/2021 11:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 22
25/10/2021 11:51:44 [ประกาศ] 10#10: ปิดตัวลงอย่างสง่างาม
25/10/2021 11:51:44 [ประกาศ] 9#9: ปิดตัวลงอย่างสวยงาม
25/10/2021 11:51:44 [ประกาศ] 10#10: กำลังออก
25/10/2021 11:51:44 [ประกาศ] 9#9: กำลังออก
25/2021/10 11:51:44 [ประกาศ] 9#9: ออก
25/10/2021 11:51:44 [ประกาศ] 10#10: ออก
25/10/2021 11:51:44 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 10
25/10/2021 11:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 9 ออกด้วยรหัส 0
25/10/2021 11:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 10 ออกด้วยรหัส 0
25/10/2021 11:51:44 [ประกาศ] 1#1: รับสัญญาณ 29 (SIGIO)
...
...
25/10/2021 17:51:44 [ประกาศ] 23#23: เริ่มกระบวนการสัญญาณ
25/2021/10 17:51:44 [ประกาศ] 1#1: สัญญาณ 1 (SIGHUP) ได้รับจาก 23 กำหนดค่าใหม่
25/10/2021 17:51:44 [ประกาศ] 1#1: การกำหนดค่าใหม่
25/10/2021 17:51:44 [ประกาศ] 1#1: ใช้วิธีเหตุการณ์ "epoll"
25/10/2021 17:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน
25/10/2021 17:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 25
25/10/2021 17:51:44 [ประกาศ] 1#1: เริ่มกระบวนการของผู้ปฏิบัติงาน 26
25/10/2021 17:51:44 [ประกาศ] 22#22: ปิดตัวลงอย่างสวยงาม
25/10/2021 17:51:44 [ประกาศ] 21#21: ปิดตัวลงอย่างสวยงาม
25/10/2021 17:51:44 [ประกาศ] 21#21: กำลังออก
25/10/2021 17:51:44 [ประกาศ] 22#22: กำลังออก
25/10/2021 17:51:44 [ประกาศ] 21#21: ทางออก
25/10/2021 17:51:44 [ประกาศ] 22#22: ทางออก
25/10/2021 17:51:44 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 21
25/10/2021 17:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 21 ออกด้วยรหัส 0
25/2021/10 17:51:44 [ประกาศ] 1#1: รับสัญญาณ 29 (SIGIO)
25/10/2021 17:51:44 [ประกาศ] 1#1: สัญญาณ 17 (SIGCHLD) ได้รับจาก 22
25/10/2021 17:51:44 [ประกาศ] 1#1: กระบวนการของผู้ปฏิบัติงาน 22 ออกด้วยรหัส 0
25/2021/10 17:51:44 [ประกาศ] 1#1: รับสัญญาณ 29 (SIGIO)
...

คำถามของฉัน:

  1. มีอะไรผิดปกติกับ สั่งการ ฉันใช้? คอนเทนเนอร์ควรหยุดทันทีที่ Nginx หยุดหรือไม่ (อาจมีบางอย่างผิดปกติกับกระบวนการหลัก?)
  2. เหตุใด Nginx จึงหยุดอย่างไม่สม่ำเสมอ ทำไมไม่ทุก 6 ชั่วโมง? คุณเห็นความแตกต่างระหว่างบันทึกแรกกับบันทึกที่สอง/สามหรือไม่?
  3. คุณมีคำแนะนำอื่น ๆ อีกไหม ฉันจะทำให้ Nginx โหลดตัวเองใหม่ได้อย่างไร (ตามที่กล่าวไว้ข้างต้น ฉันไม่ต้องการอะไรบนโฮสต์ + ฉันไม่ต้องการรวมคอนเทนเนอร์ nginx และ certbot หากไม่จำเป็นจริงๆ...)

ขอขอบคุณสำหรับความช่วยเหลือของคุณ!

nulldevops avatar
cn flag
ดูเหมือนว่าจะใช้งานได้แล้ว ฉันแค่ต้อง `--force-recreate' ใน 'docker-compose up' ของฉัน หากฉันไม่บังคับให้สร้างบางสิ่งขึ้นมาใหม่ ก็แค่โยน nginx ออกไปเป็นครั้งคราว... ฉันหวังว่านี่จะช่วยใครซักคน
lonix avatar
cn flag
ฉันยังพบปัญหานี้ บางครั้งก็ใช้งานได้หลายเดือนและบางครั้งก็หยุดทำงานทุกๆ 2-3 วัน ฉันจะลองใช้เคล็ดลับการสร้างพลังใหม่ของคุณ - ขอบคุณ! แต่ตั้งแต่ที่คุณโพสต์นั้นคุณหาสาเหตุเจอหรือยัง? เป็นปัญหากวนใจจริงๆ...
nulldevops avatar
cn flag
@lonix ฉันไม่ได้มีปัญหาใด ๆ ตั้งแต่นั้นมา แต่ฉันยังไม่แน่ใจว่าอะไรทำให้เกิดพฤติกรรมนี้
lonix avatar
cn flag
ดีใจที่ได้ยินเช่นนั้น. ป.ล. คุณไม่ได้ใช้ docker stack/swarm ใช่ไหม ฉันเป็น แต่การกำหนดค่าของฉันคล้ายกับของคุณ ฉันอัปเกรดเป็น nginx ล่าสุดซึ่งมีการแก้ไขข้อบกพร่องบางอย่าง อาจช่วยได้!

โพสต์คำตอบ

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