These image extends webdevops/php-dev with a apache daemon which is running on port 80 and 443

Uses Supervisord

This image is using supervisor and runs the daemon under user application (UID 1000; GID 1000) as default. If the container is started under a different user the daemon will be run under the specified uid.


PHP is running in development mode. Zend Opcode Cache is set to to revalidate files for best development experience.


PHP-FPM is accessable by public port 9000

Docker image tags

Tag Distribution name PHP Version
5.6 deprecated PHP 5.6
7.0 deprecated PHP 7.0
7.1 deprecated PHP 7.1
7.2 deprecated PHP 7.2
7.3 deprecated PHP 7.3
7.4 customized official php image PHP 7.4
8.0 customized official php image PHP 8.0
8.1 customized official php image PHP 8.1
8.2 customized official php image PHP 8.2
7.1-alpine deprecated PHP 7.1
7.2-alpine deprecated PHP 7.2
7.3-alpine deprecated PHP 7.3
7.4-alpine customized official php image PHP 7.4
8.0-alpine customized official php image PHP 8.0
8.1-alpine customized official php image PHP 8.1
8.2-alpine customized official php image PHP 8.2
alpine deprecated PHP 7.x
alpine-php7 deprecated PHP 7.x
alpine-php5 deprecated PHP 5.6
alpine-3 deprecated PHP 5.6
alpine-3-php7 deprecated PHP 7.x
ubuntu-12.04 deprecated PHP 5.3
ubuntu-14.04 deprecated PHP 5.5
ubuntu-15.04 deprecated PHP 5.6
ubuntu-15.10 deprecated PHP 5.6
ubuntu-16.04 deprecated PHP 7.0
debian-7 deprecated PHP 5.4
debian-8 deprecated PHP 5.6
debian-8-php7 deprecated PHP 7.x (via sury)
debian-9 deprecated PHP 7.0
centos-7 deprecated PHP 5.4
centos-7-php56 deprecated PHP 5.6
centos-7-php7 deprecated PHP 7.0

Environment variables

Base environment variables

Environment variable Description Default
LOG_STDOUT Destination of daemon output empty (stdout)
LOG_STDERR Destination of daemon errors empty (stdout)
SERVICE_CRON_OPTS cron daemon arguments empty (when syslog is used)
SERVICE_DNSMASQ_OPTS dnsmasq daemon arguments empty (when syslog is used)
SERVICE_DNSMASQ_USER dnsmasq effective user root
SERVICE_POSTFIX_OPTS postfix daemon arguments empty (when syslog is used)
SERVICE_SSH_OPTS ssh daemon arguments empty (when syslog is used)
SERVICE_SUPERVISOR_OPTS supervisor daemon arguments empty (when syslog is used)
SERVICE_SUPERVISOR_USER supervisor effective user root
SERVICE_SYSLOG_OPTS syslog daemon arguments empty (when syslog is used)

Base environment variables

Environment variable Description Default
POSTFIX_MYNETWORKS Postfix mynetworks address empty
POSTFIX_RELAYHOST Postfix upstream relay server empty

PHP modules

As we build our images containing almost every PHP module and having it activated by default, you might want to deactivate some.

You can specify a comma-separated list of unwanted modules as dynamic env variable PHP_DISMOD, e.g. PHP_DISMOD=ioncube,redis.

PHP.ini variables

You can specify eg. php.memory_limit=256M as dynamic env variable which will set memory_limit = 256M as php setting.

Environment variable Description Default
php.{setting-key} Sets the {setting-key} as php setting  
PHP_DISPLAY_ERRORS display_errors 0
PHP_MEMORY_LIMIT memory_limit 512M
PHP_MAX_EXECUTION_TIME max_execution_time 300
PHP_POST_MAX_SIZE post_max_size 50M
PHP_UPLOAD_MAX_FILESIZE upload_max_filesize 50M
PHP_OPCACHE_MEMORY_CONSUMPTION opcache.memory_consumption 256
PHP_OPCACHE_MAX_ACCELERATED_FILES opcache.max_accelerated_files 7963
PHP_OPCACHE_VALIDATE_TIMESTAMPS opcache.validate_timestamps default
PHP_OPCACHE_REVALIDATE_FREQ opcache.revalidate_freq default
PHP_OPCACHE_INTERNED_STRINGS_BUFFER opcache.interned_strings_buffer 16

PHP FPM variables

You can specify eg. fpm.pool.pm.max_requests=1000 as dyanmic env variable which will sets pm.max_requests = 1000 as fpm pool setting. The prefix fpm.pool is for pool settings and fpm.global for global master process settings.

Environment variable Description Default
fpm.global.{setting-key} Sets the {setting-key} as fpm global setting for the master process  
fpm.pool.{setting-key} Sets the {setting-key} as fpm pool setting  
FPM_PROCESS_MAX process.max distribution default
FPM_PM_MAX_CHILDREN pm.max_children distribution default
FPM_PM_START_SERVERS pm.start_servers distribution default
FPM_PM_MIN_SPARE_SERVERS pm.min_spare_servers distribution default
FPM_PM_MAX_SPARE_SERVERS pm.max_spare_servers distribution default
FPM_PROCESS_IDLE_TIMEOUT pm.process_idle_timeout distribution default
FPM_MAX_REQUESTS pm.max_requests distribution default
FPM_REQUEST_TERMINATE_TIMEOUT request_terminate_timeout distribution default
FPM_RLIMIT_FILES rlimit_files distribution default
FPM_RLIMIT_CORE rlimit_core distribution default


Due to the incompatibilities between composer v1 and v2 we introduce a simple mechanism to switch between composer versions.

Environment variable Description Default
COMPOSER_VERSION Specify the composer version to use 2

Be aware that this switch is only executed during container start (entrypoint). If you want to build your software with a specific composer version, you can do this:

FROM webdevops/php-nginx:7.3
COPY ./src /app
RUN composer1 install -d /app

Or composer respectively.

PHP development environment variables

Environment variable Description Default
WEB_DOCUMENT_ROOT Document root for webserver /app
WEB_DOCUMENT_INDEX Index document index.php
WEB_ALIAS_DOMAIN Domain aliases *.vm
WEB_PHP_SOCKET PHP-FPM socket address (for php-* images)
WEB_NO_CACHE_PATTERN RegExp of files which should be delivered by webserver as non cacheable to browser \.(css|js|gif|png|jpg|svg|json|xml)$
PHP_DEBUGGER Specifies which php debugger should be active xdebug (eg. xdebug, blackfire or none)
XDEBUG_MODE php.ini value for xdebug.mode none
XDEBUG_START_WITH_REQUEST php.ini value for xdebug.start_with_request none
XDEBUG_REMOTE_AUTOSTART php.ini value for xdebug.remote_autostart none
XDEBUG_REMOTE_CONNECT_BACK php.ini value for xdebug.remote_connect_back none
XDEBUG_DISCOVER_CLIENT_HOST php.ini value for xdebug.discover_client_host none
XDEBUG_CLIENT_HOST php.ini value for xdebug.client_host none
XDEBUG_CLIENT_PORT php.ini value for xdebug.client_port none
XDEBUG_REMOTE_HOST php.ini value for xdebug.remote_host none
XDEBUG_REMOTE_PORT php.ini value for xdebug.remote_port none
XDEBUG_MAX_NESTING_LEVEL php.ini value for xdebug.max_nesting_level none
XDEBUG_IDE_KEY php.ini value for xdebug.idekey none
XDEBUG_PROFILER_ENABLE php.ini value for xdebug.profiler_enable none
XDEBUG_PROFILER_ENABLE_TRIGGER php.ini value for xdebug.profiler_enable_trigger none
XDEBUG_TRIGGER_VALUE php.ini value for xdebug.trigger_value none
XDEBUG_OUTPUT_DIR php.ini value for xdebug.output_dir none
XDEBUG_PROFILER_ENABLE_TRIGGER_VALUE php.ini value for xdebug.profiler_enable_trigger_value none
XDEBUG_PROFILER_OUTPUT_DIR php.ini value for xdebug.profiler_output_dir none
XDEBUG_PROFILER_OUTPUT_NAME php.ini value for xdebug.profiler_output_name none
BLACKFIRE_SERVER_ID php.ini value for blackfire.server_id none
BLACKFIRE_SERVER_TOKEN php.ini value for blackfire.server_token none
SERVICE_BLACKFIRE_AGENT_OPTS Blackfire agent command arguments empty

Please be aware that depending of the image you are using it can contain either xdebug2 or xdebug3. You can find the necessary configuration options according to your xdebug version here: https://xdebug.org/docs/upgrade_guide


PHP customization

For customization a placeholder /opt/docker/etc/php/php.ini is available which will be loaded as last configuration file. All settings can be overwritten in this ini file.

Either use COPY inside your Dockerfile to overwrite this file or use RUN echo memory_limit = 128 M >> /opt/docker/etc/php/php.ini to set specific php.ini values.

Apache customization

This image has two directories for configuration files which will be automatic loaded.

For global configuration options the directory /opt/docker/etc/httpd/conf.d can be used. For vhost configuration options the directory /opt/docker/etc/httpd/vhost.common.d can be used.

Any *.conf files inside these direcories will be included either global or the vhost section.

Docker image layout

Apache layout

File/Directory Description
/opt/docker/etc/httpd/conf.d badge-customization

Main global configuration directory

(automatically included files)

/opt/docker/etc/httpd/conf.d/10-php.conf PHP cgi configuration
/opt/docker/etc/httpd/conf.d/10-error-document.conf Error document configuration
/opt/docker/etc/httpd/conf.d/10-log.conf Log configuration
/opt/docker/etc/httpd/conf.d/10-server.conf Basic server configuration
/opt/docker/etc/httpd/ssl badge-customization

SSL configuration directory for

certifications and keys

/opt/docker/etc/httpd/ssl/server.crt badge-customization Example SSL certification (*.vm)
/opt/docker/etc/httpd/ssl/server.csr badge-customization Example SSL certification request (*.vm)
/opt/docker/etc/httpd/ssl/server.key badge-customization Example SSL key (*.vm)
/opt/docker/etc/httpd/vhost.common.d badge-customization

Vhost configuration directory

(automatically included files)


Placeholder configuration file

(prevent include errors for Apache 2.2)

/opt/docker/etc/httpd/global.conf Global httpd configuration
/opt/docker/etc/httpd/main.conf Main httpd configuration
/opt/docker/etc/httpd/php.conf badge-deprecated Deprecated PHP configuration
/opt/docker/etc/httpd/vhost.common.conf badge-deprecated Deprecated vhost common include
/opt/docker/etc/httpd/vhost.conf Vhost configuration
/opt/docker/etc/httpd/vhost.ssl.conf Vhost SSL configuration
/opt/docker/etc/supervisor.d/httpd.conf Supervisord configuration file for Apache HTTPD

PHP layout

File/Directory Description
/opt/docker/etc/php/php.webdevops.ini PHP settings from WebDevOps image
/opt/docker/etc/php/php.ini badge-customization php.ini for custom settings
/opt/docker/etc/php/fpm/php-fpm.conf PHP-FPM main configuration file
/opt/docker/etc/php/fpm/pool.d/application.conf Application PHP-FPM pool configuration file
/opt/docker/etc/supervisor.d/php-fpm.conf Supervisord configuration file for PHP-FPM