Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@shim-hiko

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

More than 1 year has passed since last update.

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の場合、引数に指定した処理が実行される

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

6
Help us understand the problem. What is going on with this article?
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
shim-hiko
業務、プライベート問わず実践した内容をまとめます。 PHP/JS/VB.net/VBA/Mysql/MariaDB/Oracle/AWS/Azure/GCP/Alibaba/Docker/k8s/宇宙は空にある

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?