Mounten Sie das Volume auf / tmp, wo die Opcache-Sperrdatei erstellt wird.
docker run -d -p 9000:9000 --read-only -v $(pwd)/tmp:/tmp php:7.3-fpm-alpine3.12
Erklärt, warum das Volume auf / tmp gemountet ist. Für opcache ist eine Sperrdatei erforderlich, um sie im gemeinsam genutzten Speicher zwischenzuspeichern. Rufen Sie in der Funktion zend_shared_alloc_create_lock mkstemp auf, um eine Sperrdatei in / tmp zu erstellen. Wenn die Erstellung fehlschlägt, wird sie nach Ausgabe der Fehlermeldung "Sperrdatei kann nicht erstellt werden" abnormal beendet.
Funktion zum Erstellen von Dateien sperren
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 wird von zend_shared_alloc_startup aufgerufen und übergibt die Laufzeiteinstellung lockfile_path als Argument.
zend_shared_alloc_create_Anrufer des Schlosses
int zend_shared_alloc_startup(size_t requested_size)
{
/*Kürzung*/
#ifndef ZEND_WIN32
zend_shared_alloc_create_lock(ZCG(accel_directives).lockfile_path);
#else
zend_shared_alloc_create_lock();
#endif
Reference
Recommended Posts