ทำไมนักเทียบท่าไม่ได้เริ่มต้นตอนบูทด้วยสคริปต์ upstart บน Ubuntu 12.04


15

ใช้คำแนะนำสำหรับDocker เริ่มอัตโนมัติบน Linode VPS ที่ใช้ Ubuntu 12.04 และ Docker 0.8.1 คอนเทนเนอร์ที่ระบุไม่เริ่มทำงานเมื่อรีบูต

เมื่อบูตฉันสามารถ

~$ sudo start [service-name]

และทุกอย่างเป็นไปตามแผนที่วางไว้ แต่ฉันต้องการที่จะรีสตาร์ทหลังจากรีบูต

สคริปต์ในบทช่วยสอนไม่ได้ออกแบบมาเพื่อจัดการกับการรีบูตหรือไม่

ไฟล์ / etc / default / docker มีหนึ่งบรรทัด:

DOCKER_OPTS="-r=false"

/etc/init/service-name.conf ตรงจากหน้านักเทียบท่า:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    # Wait for docker to finish starting up first.
    FILE=/var/run/docker.sock
    while [ ! -e $FILE ] ; do
        inotifywait -t 2 -e create $(dirname $FILE)
    done
    /usr/bin/docker start -a db5e61a9afa8
end script

2
อะไรคือเนื้อหาของสคริปต์พุ่งพรวดของคุณและ/etc/default/docker?
Bruno Pereira

คำตอบ:


6

เมื่อถึงจุดหนึ่งในช่วงสองสามเดือนที่ผ่านมาสคริปต์พุ่งพรวดในบทช่วยสอนถูกเปลี่ยนเพื่อลบลูปเพื่อรอให้นักเทียบท่าเริ่มต้น ฉันลบลูปออกจากสคริปต์ upstart ของฉันและคอนเทนเนอร์ของฉันตอนนี้รีสตาร์ทอย่างถูกต้องหลังจากรีบูต

/etc/init/service-name.conf สคริปต์ของฉันตอนนี้มีลักษณะเช่นนี้:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    /usr/bin/docker start -a db5e61a9afa8
end script

ฉันไม่แน่ใจว่าเกิดอะไรขึ้นกับลูปนั้น บางทีมันอาจชี้ไปที่ไฟล์ผิดบนระบบของฉันแม้ว่าฉันจะไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับการติดตั้งนักเทียบท่าเริ่มต้น สำหรับตอนนี้ฉันแค่ดีใจที่การแก้ไขเกี่ยวข้องกับการลบโค้ดแทนที่จะทำงานที่ซับซ้อน


มันน่าจะพุ่งพรวด - ish มากขึ้นเพื่อเปลี่ยนงานนักเทียบท่าเพื่อส่งสัญญาณ (นักเทียบท่าเริ่มต้น) และให้สัญญาณนั้นทริกเกอร์งานคอนเทนเนอร์เพื่อเริ่มต้น
MikeyB

stop service-nameคุณไม่สามารถหยุดภาชนะวิธีนี้โดยการออกคำสั่ง ฉันกำลังเผชิญกับปัญหานี้ :(
อาเหม็ดอัล Hafoudh

3

สำหรับทุกคนที่ใช้อูบุนตู 14.04 apt-get รสชาติของนักเทียบท่า คุณเพียงแค่ต้องเปลี่ยนสคริปต์เริ่มต้นเพื่อรอที่ "docker.io" และไม่ใช่ "docker" เช่น:

description "Docker startup script for yum_repo"
author "me"
start on filesystem and started docker.io
stop on runlevel [!2345]
respawn
script
  /usr/local/bin/docker start -a yum_repo_run
end script

1

ฉันใช้ Ubuntu 13.10 เป็นโฮสต์และฉันมีปัญหาเดียวกัน ฉันพบว่านักเทียบท่าติดตั้งสคริปต์ rc สำหรับนักเทียบท่าใน/etc/init.d/dockerและในเวลาเดียวกันติดตั้งสคริปต์พุ่งพรวดที่ /etc/init/docker.conf ฉันต้องลบสคริปต์ rc /etc/init.d/dockerเพื่อให้ปัญหานี้หายไป

หวังว่าสิ่งนี้จะได้ผลกับคุณเช่นกัน


น่าเศร้าที่สิ่งนี้ไม่ได้ผลสำหรับฉัน
โจดี้

0
DOCKER_OPTS="-r=false"

หมายความว่า: อย่ารีสตาร์ทภาชนะที่ใช้ก่อนหน้า

ลบ-rตัวเลือกหรือเปลี่ยนเป็นจริง


2
ถูกต้อง แต่ประเด็นคือให้รีสตาร์ทคอนเทนเนอร์เริ่มต้นไม่ใช่ตัวเทียบท่า daemon หากนักเทียบท่า daemon เริ่มต้นคอนเทนเนอร์เมื่อรีบูตกระบวนการไม่สามารถจัดการได้โดยพุ่งพรวด
โจดี้

0

/var/run/docker.sockเป็นซ็อกเก็ตดังนั้นคุณต้องใช้-Sเมื่อทดสอบการมีอยู่:

FILE=/var/run/docker.sock
while [ ! -S $FILE ] ; do
    inotifywait -t 2 -e create $(dirname $FILE)
done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.