無人アップグレード後に Cron Docker コンテナが適切に再起動しない

無人アップグレード後に Cron Docker コンテナが適切に再起動しない

免責事項:私は Docker やサーバー全般についてほとんど経験がありません。サーバー関連の作業のほとんどは、元従業員が作成したマニュアルに従って、また Google 検索で行っています。

私たちはDockerコンテナのアップデートを管理するためにDocker swarmを使用しています。また、セキュリティアップグレードには無人アップグレードを使用しています。
無人アップグレードが実行されると、すべてのコンテナが作成され、すべてのDockerサービスが正常に実行されます(例:いくつかのアプリサービスキャッシュまたは何らかのアプリサービス_何らかのアプリサービス)、ただし、Cronインスタンスは別のDockerサービスで実行されている(何らかのアプリサービス_cron)。Docker
サービスを手動で更新する必要がある場合は、この問題は発生しません。そのため、無人アップグレードを実行するたびに、Cron サービスを手動で再起動して、Cron サービスが正常に実行されるようにする必要があります。サービスを手動で再起動するために使用するコマンドは次のとおりです。

git checkout newappversion
sudo docker-compose build
sudo docker-compose config > someappservice.docker.stack
sudo docker stack deploy --compose-file someappservice.docker.stack someappservice
sudo docker service update --force someappservice_cron

無人アップグレードが完了した後、なぜ動作しないのかわかりません。何が問題なのか、誰か手がかりをお持ちですか?

これは cron.Dockerfile です:

FROM alpine:latest

RUN apk add --update apk-cron curl tzdata

COPY docker-entrypoint.sh /
COPY crontab.txt timeout-check.sh notifications-email-daily.sh notifications-email-hourly.sh /

RUN /usr/bin/crontab /crontab.txt

CMD [ "/docker-entrypoint.sh" ]

これは docker-entrypoint.sh です:

#!/bin/sh

# start cron
/usr/sbin/crond -f -l 8

これは 50unattended-upgrades ファイルです:

// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    // Extended Security Maintenance; doesn't necessarily exist for
    // every release and this system may not have it installed, but if
    // available, the policy for updates is such that unattended-upgrades
    // should also install from here by default.
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
//  "${distro_id}:${distro_codename}-updates";
//  "${distro_id}:${distro_codename}-proposed";
//  "${distro_id}:${distro_codename}-backports";
};

// Python regular expressions, matching packages to exclude from upgrading
Unattended-Upgrade::Package-Blacklist {
    // The following matches all packages starting with linux-
//  "linux-";

    // Use $ to explicitely define the end of a package name. Without
    // the $, "libc6" would match all of them.
//  "libc6$";
//  "libc6-dev$";
//  "libc6-i686$";

    // Special characters need escaping
//  "libstdc\+\+6$";

    // The following matches packages like xen-system-amd64, xen-utils-4.1,
    // xenstore-utils and libxenstore3.0
//  "(lib)?xen(store)?";

    // For more information about Python regular expressions, see
    // https://docs.python.org/3/howto/regex.html
};

// This option controls whether the development release of Ubuntu will be
// upgraded automatically. Valid values are "true", "false", and "auto".
Unattended-Upgrade::DevRelease "auto";

// This option allows you to control if on a unclean dpkg exit
// unattended-upgrades will automatically run 
//   dpkg --force-confold --configure -a
// The default is true, to ensure updates keep getting installed
//Unattended-Upgrade::AutoFixInterruptedDpkg "true";

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGTERM. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "true";

// Install all updates when the machine is shutting down
// instead of doing it in the background while the machine is running.
// This will (obviously) make shutdown slower.
// Unattended-upgrades increases logind's InhibitDelayMaxSec to 30s.
// This allows more time for unattended-upgrades to shut down gracefully
// or even install a few packages in InstallOnShutdown mode, but is still a
// big step back from the 30 minutes allowed for InstallOnShutdown previously.
// Users enabling InstallOnShutdown mode are advised to increase
// InhibitDelayMaxSec even further, possibly to 30 minutes.
//Unattended-Upgrade::InstallOnShutdown "false";

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "[email protected]"
//Unattended-Upgrade::Mail "";

// Set this value to one of:
//    "always", "only-on-error" or "on-change"
// If this is not set, then any legacy MailOnlyOnError (boolean) value
// is used to chose between "only-on-error" and "on-change"
//Unattended-Upgrade::MailReport "on-change";

// Remove unused automatically installed kernel-related packages
// (kernel images, kernel headers and kernel version locked tools).
//Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";

// Do automatic removal of newly unused dependencies after the upgrade
//Unattended-Upgrade::Remove-New-Unused-Dependencies "true";

// Do automatic removal of unused packages after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";

// Automatically reboot *WITHOUT CONFIRMATION* if
//  the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "true";

// Automatically reboot even if there are users currently logged in
// when Unattended-Upgrade::Automatic-Reboot is set to true
//Unattended-Upgrade::Automatic-Reboot-WithUsers "true";

// If automatic reboot is enabled and needed, reboot at the specific
// time instead of immediately
//  Default: "now"
Unattended-Upgrade::Automatic-Reboot-Time "23:10";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";

// Enable logging to syslog. Default is False
// Unattended-Upgrade::SyslogEnable "false";

// Specify syslog facility. Default is daemon
// Unattended-Upgrade::SyslogFacility "daemon";

// Download and install upgrades only on AC power
// (i.e. skip or gracefully stop updates on battery)
// Unattended-Upgrade::OnlyOnACPower "true";

// Download and install upgrades only on non-metered connection
// (i.e. skip or gracefully stop updates on a metered connection)
// Unattended-Upgrade::Skip-Updates-On-Metered-Connections "true";

// Verbose logging
// Unattended-Upgrade::Verbose "false";

// Print debugging information both in unattended-upgrades and
// in unattended-upgrade-shutdown
// Unattended-Upgrade::Debug "false";

// Allow package downgrade if Pin-Priority exceeds 1000
// Unattended-Upgrade::Allow-downgrade "false";

これは docker-compose.yml の一部です。

cron:
    build:
      context: cron
      dockerfile: cron.Dockerfile
    image: cron:latest
    depends_on:
      - someappservice
    networks:
      - someappservice
    deploy:
      replicas: 1

答え1

再起動ポリシーが設定されていません。デフォルトの再起動ポリシーは:

いいえ: コンテナを自動的に再起動しません。

再起動ポリシーを構成ファイルに追加します。

cron:
    # your definition
    restart: unless-stopped
    

関連情報