у меня возникла проблема с новой установкой SuiteCRM 8.6 с докеризацией, которая возвращается каждый раз, когда я пытаюсь восстановить кеш из пользовательского интерфейса:
Неустранимая ошибка PHP: Uncaught RuntimeException: невозможно создать каталог прокси-сервера Doctrine «/bitnami/suitecrm/cache/prod/doctrine/orm/Proxies».
После многих дней тестирования я понял, что проблема, по-видимому, связана с несовместимостью между SuiteCRM (Symphony) и привязкой Docker.
Я тестировал разными способами:
Разрешения и право собственности на файлы проверяются дважды. Имейте в виду, что восстановление кеша из пользовательского интерфейса запускается пользователем Apache (www-data), а владельцем файла и группой является www-data:www-data.
Проблема возникает каждый раз, когда я работаю с привязкой Docker, но, как ни странно, работает отлично, если я попробую использовать официальную версию Bitnami без привязки. Если я установлю привязку монтирования в этой установке, проблема возникнет снова.
Я обратился за помощью на официальный форум поддержки здесь и GitHub, но безуспешно.
У кого-нибудь есть идеи о том, как решить эту проблему?
Заранее спасибо.
Редактируйте, я даю вам дополнительную информацию.
Мой Докерфайл:
FROM ubuntu:24.04
ARG USER_ID=1000
ENV TZ=Europe/Rome
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update
RUN apt -y upgrade
RUN apt-get install vim -y
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install apache2 -y
RUN apt -y install ca-certificates apt-transport-https software-properties-common
RUN add-apt-repository ppa:ondrej/php
RUN apt-get -y update
RUN apt-get install -y php8.2 libapache2-mod-php8.2
RUN apt-get install -y php8.2-fpm libapache2-mod-fcgid
RUN apt-get install -y php8.2-mysql
RUN apt-get install -y php8.2-curl php8.2-intl php8.2-zip php8.2-imap php8.2-gd
RUN apt-get install -y slapd ldap-utils php-ldap php8.2-ldap php8.2-soap
RUN apt-get install -y php8.2-xdebug
RUN apt install -y php8.2-xml php8.2-mbstring
RUN apt install -y zlib1g-dev libxml2-dev
RUN apt-get update && apt-get install -y \
gnupg \
g++ \
procps \
openssl \
git \
unzip \
libzip-dev \
libfreetype6-dev \
libpng-dev \
libjpeg-dev \
libicu-dev \
libonig-dev \
libxslt1-dev \
acl \
&& echo 'alias sf = "php bin/console"' >> ~/.bashrc
RUN a2enmod rewrite
RUN a2enconf php8.2-fpm
RUN apt-get update && apt-get upgrade -y && \
apt-get install -y nodejs \
npm
RUN npm install -g @angular/cli
RUN npm install --global yarn
RUN usermod -u ${USER_ID} www-data
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
CMD ["apachectl", "-D", "FOREGROUND"]
EXPOSE 80
EXPOSE 9000
Мой docker-compose.yml
services:
suitecrm:
container_name: suitecrm-mca
build: .
networks:
- suitecrm_net
volumes:
#SuiteCRM Application Folder
- ./www:/var/www/html:delegated
#PHP config
- ./docker/config/php/php.ini:/etc/php/8.2/apache2/php.ini
- ./docker/config/php/php.ini:/etc/php/8.2/cli/php.ini
#APACHE config
- ./docker/config/apache/sites.conf:/etc/apache2/sites-enabled/sites.conf
#APACHE Log Folder
- ./logs/apache:/var/log/apache2/
#PHP Log Folder
- ./logs/php:/var/log/php/
#PHP Log Folder
- ./logs/xdebug:/tmp/
#XDebug settings
extra_hosts:
- "host.docker.internal:host-gateway"
env_file:
- .env
ports:
- "80:80"
mysql:
container_name: mysql-mca
image: mysql:8.0
ports:
- "3306:3306"
env_file: .env
environment:
- MYSQL_ROOT_PASSWORD=suitecrm
- MYSQL_USER=suitecrm
- MYSQL_PASSWORD=suitecrm
- MYSQL_DATABASE=suitecrm
volumes:
- ./docker/data/mysql:/var/lib/mysql:delegated
networks:
- suitecrm_net
networks:
suitecrm_net:
driver: bridge
Привет @rand'Chris, спасибо за вопросы. Да, я думаю, это связано с Docker, потому что образ битнами с нуля работает отлично, и проблемы начинаются только тогда, когда я использую монтирование привязки. Мое монтирование привязки является двунаправленным, и я уже пробовал с помощью RUN usermod -u ${USER_ID} www-data (когда USER_ID также пытался с идентификаторами 1000, 33 и 501), но безуспешно. Chmod 777 не помог. Я редактирую вопрос, добавляя дополнительную информацию, которую вы задали.






Решение состоит в том, чтобы «исключить» папку /cache из монтирования привязки docker-compose.yml, как показано ниже:
services:
suitecrm:
container_name: suitecrm
build: .
volumes:
#SuiteCRM Application Folder
- ./www:/var/www/html:delegated
- /var/www/html/cache/ #Anonymous volume inside the existing one
Таким образом, подпапка кэша может заново создавать прокси-классы при перестроении и восстановлении.
Спасибо.
Если вы считаете, что это связано с докером, вам следует включить некоторые детали настройки докера. Ваше привязное монтирование доступно только для чтения? docs.docker.com/storage/bind-mounts Каковы разрешения в исходном каталоге? Сопоставляются ли uids с одним и тем же значением? Если вы сделаете тест
chmod 777, он сработает?