Help us understand the problem. What is going on with this article?

【Docker / php-fpm】docker-php-entrypointの動作

php公式イメージのDockefileの内容を確認していたら

Dockerfile
ENTRYPOINT:["docker-php-entrypoint"]
(中略)
CMD:["php-fpm"]

という記述を見つけてなんぞこれ?となったのでその解説。
php公式イメージでphp起動にオプション付与したり、
phpと別プロセスも走らせたりするときの一助にはなるかと。

ENTRYPOINTとCMDが両方ある場合

ENTRYPOINTとCMDがどちらもセットしてある場合、
CMDの設定値はENTRYPOINTへの引数として渡されます。

今回のケース

今回の場合、CMDに設定されているphp-fpmそれ単体でプロセス起動されるのに、わざわざENTRYPOINTのdocker-php-entrypoint引数として渡されることになります。

僕の場合、CMDにシェルを指定してphpとcronを同一コンテナで動かそうとしていました。
docker-php-entrypointが何をしているか理解しないと想定外の動きをしそうでちょっと怖いですね。

先に結論

似た様なことを考えている人、問題ないのでそのままGOしてください。

docker-php-entrypoint、以下の単純な処理のためのものです。
CMDにオプションだけがセット → CMDの設定値をオプションとしてphp-fpmを起動
その他 → CMDをそのまま実行

解説

下記が問題のファイルです。単純なシェルですね。

docker-php-entrypoint
#!/bin/sh
set -e

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
    set -- php-fpm "$@"
fi

exec "$@"

ざっと解説すると

  • 実行時に渡された1番目の引数がオプションかどうかチェック (if文)
  • オプションだったら1番目の引数に"php-fpm"、実行時の引数をそれ以降の引数としてセット (set -- php-fpm "$@")
  • 全引数を並べて実行 (exec "$@")

って流れです。

オプションかどうかは1番目の引数の"-"以降を抜き出したものと、
1番目の引数全体が合致(-で始まるオプションか否か)で判定しています。

execをechoに変えたシェルを作って試してみるとわかりやすいと思います。
以下、その場合の例です。

オプションだけを渡して実行(適当)

$ docker-php-entrypoint-echo -f -d
php-fpm -f -d
// php-fpmにシェル実行時の引数が続く
// execの場合、オプション付きのphp-fpmが実行される

その他

$ docker-php-entrypoint-echo test.sh
test.sh
// 渡した引数だけが表示される
// execの場合、引数に指定した処理が実行される

これで安心して魔改造できますね!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away