[DOCKER] Exécutez PHP-FPM avec OPcache activé dans un conteneur en lecture seule

environnement

PHP7.3opcacheDockerphp-fpm

supposition

Méthode

Montez le volume sur / tmp où le fichier de verrouillage opcache est créé.

docker run -d -p 9000:9000 --read-only -v $(pwd)/tmp:/tmp php:7.3-fpm-alpine3.12

Commentaire

Explique pourquoi le volume est monté sur / tmp. opcache nécessite un fichier de verrouillage à mettre en cache dans la mémoire partagée. Dans la fonction zend_shared_alloc_create_lock, appelez mkstemp pour créer un fichier de verrouillage dans / tmp. Si la création échoue, elle se terminera anormalement après la sortie du message d'erreur «Impossible de créer le fichier de verrouillage».

Verrouiller la fonction de création de fichier


void zend_shared_alloc_create_lock(char *lockfile_path)
{
	int val;

#ifdef ZTS
    zts_lock = tsrm_mutex_alloc();
#endif

	snprintf(lockfile_name, sizeof(lockfile_name), "%s/%sXXXXXX", lockfile_path, SEM_FILENAME_PREFIX);
	lock_file = mkstemp(lockfile_name);
	fchmod(lock_file, 0666);

	if (lock_file == -1) {
		zend_accel_error(ACCEL_LOG_FATAL, "Unable to create lock file: %s (%d)", strerror(errno), errno);
	}
	val = fcntl(lock_file, F_GETFD, 0);
	val |= FD_CLOEXEC;
	fcntl(lock_file, F_SETFD, val);

	unlink(lockfile_name);
}

zend_shared_alloc_create_lock est appelé depuis zend_shared_alloc_startup et transmet le paramètre d'exécution lockfile_path comme argument.

zend_shared_alloc_create_Appelant de la serrure


int zend_shared_alloc_startup(size_t requested_size)
{
/*réduction*/

#ifndef ZEND_WIN32
	zend_shared_alloc_create_lock(ZCG(accel_directives).lockfile_path);
#else
	zend_shared_alloc_create_lock();
#endif

Reference

Recommended Posts

Exécutez PHP-FPM avec OPcache activé dans un conteneur en lecture seule
Lire une chaîne dans un fichier PDF avec Java
[Docker] Supprimer uniquement le volume associé à un conteneur spécifique
Exécuter PureScript sur un conteneur Docker
Commencer par installer Docker sur EC2 et exécuter Yellowfin dans un conteneur
Exécutez des applications x11 dans un conteneur Docker (prend en charge l'accès réseau à partir du conteneur)
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
Exécutez DMN à l'aide du moteur Camunda DMN
Lire le fichier xlsx en Java avec Selenium
Diviser une chaîne avec ". (Dot)" en Java
Configurer un multi-projet avec des sous-répertoires dans Gradle
Exécutons un lot dans un conteneur à l'aide d'Azure Batch
[Partie 1] Création d'un conteneur Docker qui fournit Markdown en HTML avec Apache / Pandoc