カテゴリー: Docker

[Docker] ホストマシンのcronからコンテナ内のphpコマンドを実行する

ネット上ではcronをコンテナ内で内包させる方法が多くありますが、今回はさくっと出来るホストマシンのcronを使った方法を採用しました。

dockerコンテナの性質から考えると、cronごとコンテナをポータブルさせたほうがメンテナンス性が高いのですが、とりあえず動かしたい時用ということで。

docker exec -tコマンドをcronに記述するだけ!

先に答えを言ってしまいますと、やり方は簡単で、

docker exec -tコマンドをcronから実行する

それだけです。

docker execコマンドがわからない方は、公式マニュアルをどうぞ。

肝なのは、docker execコマンドでよく使われる引数「-it」(インタラクティブモードでコンテナ内に入る)ではなく、「-t」です。

引数「-i」を入れてしまうと

the input device is not a TTY

と怒られてしまいます。

まずはdockerコマンドのテスト

とりあえず、cronで実行したいコマンドをターミナルから直で実行してみます。

今回はテストなので、「cron start!」と表示するだけのcron.phpを実行させます。

コンテナは、公式の「php:7-apache」イメージを使っています。

<?php

echo 'cron start!'

docker execコマンドで実行します。

docker exec -t {コンテナID} php cron.php

cron start!

無事表示されました。

cron.phpのあとに半角スペースを空ければ変数を渡すこともできます。標準のターミナルと一緒ですね。

cronに設定

続いて、crontabに設定を書きます。

dockerのパスを確認

dockerコマンドはcron内ではフルパスが必要なので、確認します。

which docker

/usr/bin/docker

cronに設定を書き込む

10 1 * * * /usr/bin/docker exec -t {コンテナID} php cron.php

これでOK。

実際に運用する際は、実行結果をログに残しておきたいので、

10 1 * * * /usr/bin/docker exec -t {コンテナID} php cron.php > /home/user/stderr

などとして、ログを記録するとエラーが起こった時に便利です。


dockerでcronって難しいイメージでしたが、ホストマシンのcronを使う限りは簡単でした。

コンテナのポータビリティを上げるためには、コンテナ内にcronを設置すべきなので、そこは後日エクスプローラ(探検)してみようと思います。

Dockerの記事

docker-machine + Portainerのクラスタ環境に新しいマシンを追加してクラスタに参加させる

docker-machine + Portainerで構築したdockerクラスタ環境に、新しいdocker-machineを追加してクラスタに参加させる方法をまとめました。 目次 1. 開発マシン環境2. docker-machineを追 [&hellip;]

docker-machine + Portainerのクラスタ環境に新しいマシンを追加してクラスタに参加させる の続きを読む

さくらのコンテナホスティングサービス・ArukasでMySQLサーバーを立てる

先日、本サービスがリリースされたさくらインターネットのコンテナホスティングサービス・Arukas。Freeプランだと無料で1インスタンスが稼働できるので、MySQLサーバーを立ててみました。

さくらのコンテナホスティングサービス・ArukasでMySQLサーバーを立てる の続きを読む

[Docker] docker pullが中断したらどうなるのか?->きちんと途中から再開されます

先日、docker pull中にサーバーがダウンしてしまったのですが、その際にdocker pullを再度実行した際にどうなるのかを確認してみました。

[Docker] docker pullが中断したらどうなるのか?->きちんと途中から再開されます の続きを読む

[Docker] MySQLコンテナを5.5から5.6にバージョンアップしたら起動しなくなったので解決方法

今まで古いサーバーと同じ環境をと思ってMySQLの5.5を使っていましたが、5.6からはDAATETIMEにデフォルトでCURRENT_TIMESTAMPが使えるらしいのでバージョンアップしたら、起動しなくなったので、対処方法をまとめました。

[Docker] MySQLコンテナを5.5から5.6にバージョンアップしたら起動しなくなったので解決方法 の続きを読む

[Docker] php.iniでtimezoneを設定しても、SQLite3でtimezoneが反映されない時の対処

PHPのプロジェクトで、SQLite3を使っていた時に、php.iniをいじっても、localtimeがUTFになってしまい困っていたところ、、、、原因はDockerコンテナのベースOSに使ったAlpine Linuxのtimezone設定がされてないことでした!

[Docker] php.iniでtimezoneを設定しても、SQLite3でtimezoneが反映されない時の対処 の続きを読む

[Docker] Cloud9にコード補完機能「c9.ide.language.codeintel」を追加する

オンライン版のCloud9であれば既に入っている機能ですが、Dockerで構築したオリジナル版の場合、コード補完機能がデフォルトで入っていません。今回は、コード補完機能「c9.ide.language.codeintel」を追加していきます。

[Docker] Cloud9にコード補完機能「c9.ide.language.codeintel」を追加する の続きを読む

[Docker] MySQLコンテナでスロークエリログを出力する

dockerで構築したMySQLサーバーでスロークエリログを出力&確認する方法をまとめました。docker-composeで構成する形式なので、コピペでもそのまま使えるようになっています。

[Docker] MySQLコンテナでスロークエリログを出力する の続きを読む