Как правильно сделать связку в Docker: php + cron?
Абсолютно нет необходимости создавать отдельный контейнер под крон, в этом нет смысла. Достаточно описать в слое выше все задачи* * * * * docker run --rm your-container /home/user/task.sh
Никак.
У тебя 2 контейнера, оба изолированы друг от друга. Соответственно php ничего не знает о контейнере cron и наоборот. Короче говоря - в контейнере cron просто нет установленого php.
Через links ты просто на сетевом уровне привязываешь php контейнер к cron контейнеру, по сути это тоже самое что сделать в контейнере cron  вот такую записьecho "php x.x.x.x" >> /etc/hosts
разумеется с некоторыми нюансами.
Что можно сделать.
1. Забыть про идею крона внутри контейнера потому что это плохо.
2. Если очень хочется, то собрать Dockerfile c php-cli, тогда все заработает.
и еще пара советов по Dockerfile
не делай много объявлений RUN без крайней необходимости, старайся записывать все инсталлы в строку с разделителем &&\.
и делай образ на основе alpine