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
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