Tworzę obraz Dockera dla mojej Symfony
aplikacji i muszę zezwolić serwerowi Apache na zapisywanie w folderach pamięci podręcznej i dzienników
#Dockerfile
FROM php:7-apache
RUN apt-get update \
&& apt-get install -y libicu-dev freetds-common freetds-bin unixodbc \
&& docker-php-ext-install intl mbstring \
&& a2enmod rewrite
COPY app/php.ini /usr/local/etc/php/
COPY app/apache2.conf /etc/apache2/apache2.conf
COPY ./ /var/www/html
RUN find /var/www/html/ -type d -exec chmod 755 {} \;
RUN find /var/www/html/ -type f -exec chmod 644 {} \;
RUN chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs
Kiedy buduję ten obraz docker build -t myname/symfony_apps:latest .
i uruchamiam kontener za pomocą docker run -p 8080:80 myname/symfony_apps:latest
. Dziennik Apache jest zalany błędami odmowy uprawnień, dziwna rzecz, którą sprawdziłem ls -a
i uprawnienia są w porządku. a kiedy uruchamiam chmod z bash kontenera, problemy z uprawnieniami do apache znikają, a aplikacja działa dobrze
Sytuacja
Uruchamianie komend chmod z pliku dockerfile: uprawnienia są zmieniane, ale Apache wciąż narzeka na odmowę dostępu . Uruchamianie chmod tych samych poleceń z bash wewnątrz kontenera: uprawnienia są zmieniane i moja aplikacja jest uruchomiona
Każdy pomysł, czy coś mi brakuje, może powinienem dodać użytkownika root gdzieś w Dockerfile?
źródło
apache2.conf
) nie powoduje problemu? Czy błędy znikną, jeśli nie zostaną zainstalowaneapache2.conf
?Odpowiedzi:
Miałem ten sam problem i wydaje się, że jest jakiś błąd w oknie dokowanym lub nakładce2, jeśli zawartość katalogu jest tworzona w jednej warstwie, a uprawnienia w drugiej są zmieniane.
Aby obejść ten problem, możesz skopiować źródła do katalogu tymczasowego:
A następnie przenieś go
/var/www/html
i skonfiguruj uprawnienia (jednymRUN
poleceniem):Stworzyłem również problem z GitHub .
źródło
Domyślna powłoka RUN w Dockerze to / bin / sh i właśnie w tym przypadku problem z nieprawidłowymi ustawieniami uprawnień.
Ale możesz zmienić na po prostu użyj / bin / bash, aby łatwo to naprawić, zauważ przed i po liście katalogów
źródło
/bin/bash -c 'chmod +x file'
działa a nie/bin/sh -c 'chmod +x file'
?Spróbuj dodać:
To zadziałało dla mnie.
źródło
Ten problem jest prawdopodobnie wynikiem
VOLUME
definicji w głównym pliku Docker. Po zdefiniowaniu woluminu w pliku Docker można dodawać pliki za pomocą poleceniaCOPY
lubADD
bezpośrednio do obrazu. JednakRUN
linia:RUN
polecenia, zobaczysz, że zmiany zostały zastosowane, ale zmiany zostały zastosowane w woluminiedocker diff
jeśli nie usuniesz tymczasowych kontenerów (możesz uruchomić kompilację,--rm=false
aby pozostały)Z powodu tego zachowania masz opcje:
Zauważ, że wewnątrz obecnych obrazów php wydaje się, że wolumin został usunięty, co oznacza, że faktycznie mamy opcję 3.
źródło
Właśnie przeprowadziłem eksperyment z następującymi elementami:
I to po prostu działa świetnie.
jednak
Kiedy zastępuję ten plik wykonywalny za pomocą woluminów tworzących okno dokowane,
execute
uprawnienie jest po prostu jak wycofane - technicznie zastępuje pierwotne uprawnienie do pliku.Poprawką dla trybu deweloperskiego jest po prostu przejście
chmod a+x yourfile
z hosta, który zostanie odziedziczony po skomponowaniu instalacji woluminu.źródło
docker run
polecenia i nie podłączono zewnętrznego woluminu.