ฉันมีปัญหาเดียวกันและคิดว่ามันสามารถแก้ไขได้ง่ายๆโดยงาน cron โทรunattended-upgrade
ทุกวัน
ความตั้งใจของฉันคือการให้สิ่งนี้เป็นโซลูชันอัตโนมัติและรวดเร็วเพื่อให้มั่นใจว่าคอนเทนเนอร์การผลิตมีความปลอดภัยและได้รับการอัปเดตเพราะอาจทำให้ฉันต้องอัปเดตรูปภาพของฉันในบางครั้งและปรับใช้อิมเมจนักเทียบท่าใหม่
นอกจากนี้ยังเป็นไปได้ที่จะสร้างและปรับใช้อิมเมจโดยอัตโนมัติด้วยGithub hooks
ฉันได้สร้างรูปภาพนักเทียบท่าพื้นฐานโดยที่จะตรวจสอบและติดตั้งการปรับปรุงความปลอดภัยทุกวัน (สามารถเรียกใช้โดยตรงdocker run itech/docker-unattended-upgrade
)
ฉันเจอวิธีอื่นที่แตกต่างกันเพื่อตรวจสอบว่าคอนเทนเนอร์ต้องการการอัพเดตหรือไม่
การใช้งานของฉันเสร็จสมบูรณ์:
Dockerfile
FROM ubuntu:14.04
RUN apt-get update \
&& apt-get install -y supervisor unattended-upgrades \
&& rm -rf /var/lib/apt/lists/*
COPY install /install
RUN chmod 755 install
RUN /install
COPY start /start
RUN chmod 755 /start
สคริปต์ตัวช่วย
ติดตั้ง
#!/bin/bash
set -e
cat > /etc/supervisor/conf.d/cron.conf <<EOF
[program:cron]
priority=20
directory=/tmp
command=/usr/sbin/cron -f
user=root
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
EOF
rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["/start"]
เริ่มต้น
#!/bin/bash
set -e
echo "Adding crontab for unattended-upgrade ..."
echo "0 0 * * * root /usr/bin/unattended-upgrade" >> /etc/crontab
# can also use @daily syntax or use /etc/cron.daily
echo "Starting supervisord ..."
exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
แก้ไข
ฉันพัฒนาเครื่องมือขนาดเล็กที่ทำงานเป็นนักเทียบท่าที่เรียกว่าคอนเทนเนอร์นักเทียบท่าและสามารถใช้เพื่ออัปเดตแพคเกจภายในหรือที่เลือกทั้งหมดเรียกใช้คอนเทนเนอร์มันยังสามารถใช้เพื่อเรียกใช้คำสั่งโดยพลการใด ๆ
สามารถทดสอบได้อย่างง่ายดายด้วยคำสั่งต่อไปนี้:
docker run --rm -v /var/run/docker.sock:/tmp/docker.sock itech/docker-run exec
ซึ่งโดยค่าเริ่มต้นจะดำเนินการdate
คำสั่งในคอนเทนเนอร์ที่ใช้งานอยู่ทั้งหมดและแสดงผลลัพธ์ ถ้าคุณผ่านupdate
แทนexec
ก็จะดำเนินการapt-get update
ตามapt-get upgrade -y
ในภาชนะบรรจุที่กำลังทำงานอยู่ทั้งหมด