Change a value in php.ini using docker with an alpine php image
Usually, there is some kind of configuration directory that is scanned for further files. Try to place a file containing your local settings there, like the following:
php.ini.local
:
max_input_vars = 20000
in your Dockerfile
:
FROM php:7.3-alpine3.9
# Project-specific ini settings
COPY ./php-ini-overrides.ini /etc/php7/conf.d/
Another way could be to mount that single file through a Docker volume (this keeps the container configuration cleaner and is more simple if you don't want to use a Dockerfile for other purposes; additionally, you don't need to update the container when changing the configuration, but only restart it):
volumes:
- ./php-ini-overrides.ini:/etc/php7/conf.d/php-ini-overrides.ini
This will work the best way, as you don't have to modify any existing file or keep track of changes from the upstream container
As a short hint: if the solution does not work directly, check whether you need to adjust the folder to put that file into. Another base image might place that folder to another location
Ing. Luca Stucchi
Software Architect, Software Developer, Technology Enthusiast Specialties: Software design, implementation, optimization, evolution, security. System Integration, API development. Database design, performance, scalability. Web Applications design, usability, analytics, security. Server administration, tuning, security. Native Android applications development.
Updated on June 09, 2022Comments
-
Ing. Luca Stucchi almost 2 years
I have a PHP application running on docker and based on
php:7.3-alpine3.9
For a big form, I am posting more than 1000 inputs, and I not only I get the error
Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0`
but worst, only 1000 input are passed to the backend
So it looks like I'd need to change the
max_input_vars
in thephp.ini
, but how can I do that ? -
Ing. Luca Stucchi over 4 yearsHi Nico, thanks, but I am fine with the file provided by Alpine. I don't want to be forced to change it manually: I am using a PHP image because I want PHP working off the shelf, and keeping track of the changes of
php.ini
it's something that I just don't want to do -
Ing. Luca Stucchi over 4 yearsThanks, but I am not using docker-composer, I am deploying on Amazon ECS. Moreover, I don't want to extract the
php.ini
from alpine image and manage his evolution during the time: I was hoping to leave that to the alpine community -
7_R3X over 4 years@LucaStucchi: Alpine and PHP community provide their software with some default values. If you change those defaults, it becomes your responsibility to manage them as part of your code. It's called "configuration as code".
-
Nico Haase over 4 yearsI don't get that: if you don't want to change the image, don't do it, use it as it is. Doing magic work with the default file from that image sounds less good to me than using the suggested way to change configuration settings through an additional file
-
Nico Haase over 4 yearsAnd, additionally, this should also work through a custom volume which I've added to the answer
-
Ing. Luca Stucchi over 4 yearsHi Nico, I tried to make your solution work, since I agree that a single override row in an incremental file works better than modifying the original
php.ini
. And after some attempts I made it work: the trick was using the directory/etc/php7/conf.d/
instead of the one that you suggested. And it worked perfectly. I am going to remove my answer since yours is way better ! Would you be so kind and change the reference to the directory, since in Alpine it does not work with the/usr/local/etc/php/conf.d/
? -
Ing. Luca Stucchi over 4 yearsIn the solution provided by Nico Haase there is no need to manage the whole
php.ini
, and it works perfectly. Thanks the same for your solution, but I still think that if I can't manage configuration files provided by Alpine, I should not. Thanks the same for your help -
Philip almost 2 yearsWhy would you call it php.ini.local and then call php-ini-overrides.ini, a compoletely different name?