Я пытаюсь запустить приложение Symfony 3 «base» (что означает не сложность вообще и только несколько установленных пакетов, но даже не включено) в стеке «LAMP» с помощью Docker и Docker Compose (я удалил MySQL от должности, потому что это не имеет значения). Это мой docker-compose.yml
файл:«AH01071: получена ошибка« Не удалось открыть основной скрипт »: разрешения контейнера или проблема с Symfony3?
version: '2'
services:
php-fpm:
build: docker/php-fpm
ports:
- "80:80"
volumes:
- ./sources:/data/www
- ./data/logs/symfony:/data/www/var/logs
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- sql-data:/var/lib/mysql
И это Dockerfile
для php-fpm
контейнера:
FROM reynierpm/docker-centos7-supervisord:latest
ENV TERM=xterm \
PATH="/root/.composer/vendor/bin:${PATH}" \
COMPOSER_ALLOW_SUPERUSER=1
RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \
https://rpms.remirepo.net/enterprise/remi-release-7.rpm
RUN yum install -y \
yum-utils \
git \
zip \
unzip \
nano \
httpd \
php71-php-fpm \
php71-php-cli \
php71-php-common \
php71-php-gd \
php71-php-intl \
php71-php-json \
php71-php-mbstring \
php71-php-mcrypt \
php71-php-mysqlnd \
php71-php-pdo \
php71-php-pear \
php71-php-xml \
php71-pecl-apcu \
php71-php-pecl-apfd \
php71-php-pecl-memcache \
php71-php-pecl-memcached \
php71-php-pecl-mongodb \
php71-php-pecl-redis \
php71-php-pecl-request \
php71-php-pecl-uploadprogress \
php71-php-pecl-xattr \
php71-php-pecl-zip && \
yum clean all && rm -rf /tmp/yum*
RUN rm -f /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/* /etc/httpd/conf.modules.d/* && \
ln -sfF /opt/remi/php71/enable /etc/profile.d/php71-paths.sh && \
ln -sfF /opt/remi/php71/root/usr/bin/{pear,pecl,phar,php,php-cgi,phpize} /usr/local/bin/. && \
mv -f /etc/opt/remi/php71/php.ini /etc/php.ini && \
ln -s /etc/php.ini /etc/opt/remi/php71/php.ini && \
rm -rf /etc/php.d && \
mv /etc/opt/remi/php71/php.d /etc/. && \
ln -s /etc/php.d /etc/opt/remi/php71/php.d
RUN curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony && \
chmod a+x /usr/local/bin/symfony
COPY container-files/
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
composer global install --no-dev
RUN yum install -y php71-php-pecl-xdebug && \
yum clean all && rm -rf /tmp/yum* && \
php --version
RUN chmod +x /config/bootstrap.sh
RUN echo 'alias sf="php bin/console"' >> ~/.bashrc
WORKDIR /data/www
EXPOSE 80 9001
Вещь я все время получаю эту ошибку при попытке получить доступ к dev
среды с использованием http://symfonyapp.local/app_dev.php
:
php-fpm | [Sat Jan 14 15:09:27.655609 2017] [proxy_fcgi:error] [pid 13:tid 140600250660608] [client 172.18.0.1:43960] AH01071: Got error 'Unable to open primary script: /data/www/web/_wdt/210673 (No such file or directory)\n', referer: http://symfonyapp.local/app_dev.php
Имея ошибку выше, я могу думать:
- собственности | вопрос разрешения на
/data/www/web
в контейнере, который является странным, поскольку эта папка принадлежитroot
и хорошо .... этоroot
мне не нужно объяснять - что-то не удается с Symfony3 и я м не знают об этом и я не мог найти его до сих пор
- Apache | PHP-FPM не может писать на такую папку, которая приводит к первому элементу в этом списке
- Apache config блокирует каталог
/web
быть написано. (mod_scurity не работает, поэтому я не могу его обвинить)
Это то, что я пробовал до сих пор без успеха, потому что я все равно получаю ту же ошибку все время.
- Изменение прав собственности/разрешений в контейнере (это приводит к ошибке в Linux, так как разрешения в томах также меняются в хосте, то же самое не происходит в Windows). Ниже приводится объяснение того, как я могу достичь такой цели.
Краткое объяснение в том, как я изменяю собственность/разрешение:
php-fpm
Dockerfile будет наследоваться от docker-centos7-supervisord
, который имеет этот script, как ENTRYPOINT
. Таким образом, я создал файл /container-files/config/init/20-permissions.sh со следующим содержанием:
#!/usr/bin/env bash
chown -R apache:root /data/www && \
find /data/www -type d -print0 | xargs -0 chmod 775 && \
find /data/www -type f -print0 | xargs -0 chmod 664
echo "Set up permissions finished"
exec "[email protected]"
Файл выше запускается на выполнение после контейнера начинается и объемы устанавливаются. Я знал, что файл выполнен, потому что я вижу Set up permissions finished
в журналах контейнеров php-fpm
. Это странно, потому что, хотя проверка собственности/разрешение после того, как показать мне следующее:
> docker exec -it php-fpm ls -la /data/www/web
total 57
drwxr-xr-x 2 root root 4096 Jan 14 03:45 .
drwxr-xr-x 2 root root 4096 Jan 14 00:40 ..
-rwxr-xr-x 1 root root 3319 Jan 13 23:54 .htaccess
-rwxr-xr-x 1 root root 635 Jan 14 03:45 app.php
-rwxr-xr-x 1 root root 1184 Jan 14 03:45 app_dev.php
-rwxr-xr-x 1 root root 2092 Jan 13 23:54 apple-touch-icon.png
drwxr-xr-x 2 root root 0 Dec 13 13:36 bundles
-rwxr-xr-x 1 root root 21244 Jan 14 00:04 config.php
-rwxr-xr-x 1 root root 6518 Jan 13 23:54 favicon.ico
-rwxr-xr-x 1 root root 116 Jan 13 23:54 robots.txt
Так что в этом случае я не уверен, если это будет хорошо или, если это возможно даже. Я создал репозиторий с двумя ветвями со всеми необходимыми для этого попытками: master с httpd и php-fpm как в одном контейнере, так и в httpd, имеющем их в отдельных контейнерах.Хотя результат в обоих случаях одинаковый.
Чтобы получить все и работает, вы должны:
- Run
docker-compose up -d --build --force-recreate
(--force,---build воссоздать естественную не нужны, но на всякий случай) - Run
docker exec -it php-fpm composer update
так что вы скачать библиотеки, необходимые для проекта. - Добавить
symfonyapp.local
ваших хостов файлы
В настоящее время я использую Docker в Windows, это информация о нем:
Version: 1.13.0-rc6-beta36 (9696)
Channel: Beta
Sha1: 64a715b54327a0ec8f28076d1a343f4c811856fb
Started on: 2017/01/13 18:34:34.519
Resources: C:\Program Files\Docker\Docker\Resources
OS: Windows 10 Pro
Edition: Professional
Id: 1607
Build: 14393
BuildLabName: 14393.693.amd64fre.rs1_release.161220-1747
Но я испытал это в Linux, так и у меня есть такое же поведение означает, что ошибка все еще существует.
Что здесь происходит? Можете ли вы дать мне несколько идей или решений? На данный момент я из них и не знаю, что еще делать.
После нашего чата я кругом вернулся сегодня вечером и построил контейнеры с новой проверкой вашего репетитора github. Кажется, что теперь он правильно управляет каталогом. Если вы это выяснили, могу ли я предложить вам опубликовать ваши выводы в качестве вашего собственного ответа? Это может помочь будущим читателям ... –
@ DanLowe вы можете запустить приложение без ошибки? Потому что я не мог, и поэтому я пытаюсь настроить разрешения ... и, кстати, это «очевидно» работает только тогда, когда Docker запускается в Windows, потому что, если я разрешаю разрешения на Linux, это превращается в беспорядок. – ReynierPM
. m не знаю, для чего ваше приложение, честно, но я смог получить что-то ответное (он в настоящее время находится в Интернете по адресу http://104.236.22.228:81/) - странице Kibana. Это то, чего вы ожидаете? Мне пришлось изменить размер моей цифровой капли воды, где я тестировал. У экземпляра 512 Мбайт недостаточно памяти, и mysql не запускался. Капля 2 ГБ прошла нормально, хотя ... –