web-dev-qa-db-ja.com

ubuntu 16.04のDockerイメージにcronとcrontabがありません

これは私のDockerfileです

FROM ubuntu:16.04
RUN apt-get update -y && apt-get install -y \
  git \
  python \
  python-pip

Dockerイメージが作成されたら、ログインして、テスト用のcronジョブをセットアップしようとします。驚いたことに、croncrontabはありません。

# ls 
app  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  
root  run  sbin  srv  sys  tmp  usr  var
# crontab -l
/bin/sh: 6: crontab: not found
# crontab -l
/bin/sh: 7: crontab: not found
# crontab -l
/bin/sh: 10: crontab: not found
# cron
/bin/sh: 11: cron: not found

しかし、私はcronがubuntuイメージに存在することを期待しています。間違った画像を選んだのですか、それともcronを有効にするために必要なことはありますか?

3
Anthony Kong

Cronコマンドは、デフォルトではイメージubuntu:16.04にインストールされていません。

実行する必要がありますapt-get install cron

6
Anthony Kong

Dockerイメージは設計上最小限であり、完全なオペレーティングシステムではなく、コンテナーの作成に使用されます。コンテナーはアプリケーションの実行を分離しているため、デフォルトでは、cron、syslog、メールなど、その環境内で実行されている他のすべてのOSデーモンはありません。

Cronは次のようにインストールできます。

RUN apt-get update \
 && DEBIAN_FRONTEND=noninteractive apt-get install \
      cron \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

dockerfile内。ただし、crontabエントリを実行するには、コンテナの起動プロセスの一部としてcronデーモンを起動する必要もあります。コンテナーで複数のプロセス(cronとアプリ)を実行するために使用できるforegoやスーパーバイザーのようなツールがありますが、そうすることはしばしばアンチパターンの兆候です。

2
BMitch