วิธีการเรียกใช้นักเทียบท่าเขียนเมื่อ bootup?


20

นี่เป็น Ubuntu 14.04 LTS VM ที่ใช้ Docker และฉันสงสัยว่าrespawnเป็นสาเหตุของปัญหาของฉัน แต่ไม่แน่ใจว่าโซลูชันที่เหมาะสมที่สุด

สคริปต์พุ่งพรวดปัจจุบัน ( cat /etc/init/dockersuitecrm.conf)

description "Start docker containers"
author "Batman"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
end script

นี้ 'งาน' ในการที่myappยังมีชีวิตอยู่และตอบสนอง แต่/sbin/initจะใช้เวลาทั้งหมดของ CPU htopเมื่อผมตรวจสอบกับ ถ้าฉันลบรายการจาก upstart ( sudo rm /etc/init/dockersuitecrm.conf) และ SSH ด้วยตนเองในและรันdocker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startฉันไม่เห็น cpu ที่ปัญหา 100% และก่อนหน้าmyappนี้จะมีชีวิตอีกครั้งและตอบสนอง

ดังนั้นฉันจึงสงสัยว่าวิธีที่ฉันเริ่มต้นนักแต่งเพลงประกอบด้านบนนั้นไม่ถูกต้อง วิธีที่ถูกต้องในการเริ่มต้นdocker-composeมักจะทำงานโดยไม่มีการแทรกแซงด้วยตนเองคืออะไร?

แก้ไข: ไม่ควรสำคัญ แต่/usr/bin/myapp -> /home/batman/dockerapps/myappเป็นลิงก์สัญลักษณ์


ไม่ใช่วิธีแก้ปัญหา แต่เป็นวิธีแก้ปัญหาฉันสามารถเรียกใช้งานได้โดยไม่ต้องใช้respawnคำสั่งในสคริปต์
DeepSpace101

คำถามเดียวกัน แต่ฉันเห็นนี้: serverfault.com/questions/615820/... docker-compose startความมหัศจรรย์อยู่กับการใช้
Mark Lopez

ฉันมีการตั้งค่าที่คล้ายกัน แต่ไม่ได้ใช้scriptบล็อก อาจเป็นส่วนหนึ่งของปัญหาหรือไม่ ฉันมีchdir /usr/bin/myapp/และในบรรทัดถัดไปexec docker-compose upแทน
jmreicha

คุณไม่ต้องการเพียงแค่เรียกใช้นักแต่งเพลงในพื้นหลัง? iedocker-compose up -d
KCD

ใส่การเริ่มระบบใหม่: อยู่ในข้อมูลจำเพาะภาชนะเสมอ
Lu32

คำตอบ:


9

ใช้ crontab แทนการใช้ time intervall เพียงพูดว่า @reboot

ดังนั้นเข้าสู่ระบบในฐานะผู้ใช้ที่ควรเริ่มสคริปต์นี้และพิมพ์คำสั่ง

crontab -e

แล้วป้อน

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

รีบูทระบบและดูว่าทำงานได้หรือไม่ มีข้อดีอย่างหนึ่งคือการพุ่งพรวดแม้ว่ามันจะเริ่มขึ้นในภายหลังคุณไม่ต้องกังวลกับการพึ่งพาเครือข่ายเช่นการเชื่อมต่อเครือข่าย ฯลฯ


มีความคิดว่าการล้างข้อมูลการรีบูตจะทำงานด้วยวิธีนี้อย่างไร
จัสตินสมิ ธ

1
ขออภัยนี่ไม่ใช่คำตอบที่ดีมาก อาจทำงานเป็นครั้งคราว แต่เนื่องจาก cron อาจโหลดก่อนข้อกำหนดของนักเทียบท่าคนอื่น ๆ คุณจะพบกับสภาพการแข่งขัน
Otheus

2

สมมติว่าคุณกำลังใช้คำจำกัดความ Docker เวอร์ชัน 2 อยู่ในตัวคุณdocker-compose.ymlคุณสามารถทำสิ่งต่อไปนี้:

กำหนดrestart: alwaysเช่นนั้น:

version: '2'
services:
  web:
    image: nginx
    restart: always

การอ้างอิง: https://docs.docker.com/compose/compose-file/compose-file-v2/


1
คำถามคือเว็บไซต์ของนักเทียบท่าที่ไม่ตอบคือคือ: "วิธีที่เหมาะสมในการเริ่มต้นนักเขียนประกอบด้วยทำงานอยู่เสมอโดยไม่ต้องแทรกแซงด้วยตนเอง?"
Otheus

0

นักเทียบท่ายังไม่พร้อมทันทีหากคุณเรียกใช้สคริปต์เร็วเกินไปจะไม่มีอะไรเกิดขึ้น นักเทียบท่าจะเริ่มตอบสนองต่อคำสั่งนักเทียบท่า ps ทันทีที่พร้อมใช้งานเพื่อให้คุณสามารถใช้เคล็ดลับนี้ใน crontab:

นาโน / etc / crontabs / root

@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml เริ่มต้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.