13 votes

Comment changer la racine du document dans PHP:7.1-apache à partir de docker-compose.yml

J'essaie de mettre en place un environnement pour Laravel, et dans ce processus, je veux changer mon Root de documents en un dossier public. J'ai fait en sorte que cela fonctionne dans un Dockerfile, mais en réalité, je préférerais que ce soit dans un fichier docker-compose.yml.

J'ai le sentiment d'avoir implémenté les commandes d'environnement requises de leur documentation

Mon code est le suivant

docker-compose.yml :

version: '3'

services:
    laravel:
        image: php:7.1-apache
        ports:
            - 8080:80
        env_file: ./.env
        environment:
            - "APACHE_DOCUMENT_ROOT=/var/www/html/public"
            - "sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf"
            - "sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf"
        volumes:
            - ./src/:/var/www/html/

.env

APACHE_DOCUMENT_ROOT=/var/www/html/public

J'ai d'abord essayé sans le fichier .env, mais j'ai obtenu une erreur indiquant que la variable APACHE_DOCUMENT_ROOT n'était pas définie. C'est pourquoi j'ai le fichier .env externe.

Quelqu'un peut-il m'indiquer comment améliorer ce yml, afin que je dispose d'un document Root différent pour mon Apache ?

Merci d'avance.

38voto

kjc Points 91

J'ai trouvé une solution à ce problème. En fait, cela fonctionnait lorsque je créais un Dockerfile avec des commandes de construction. La structure suivante a donc réglé le problème :

docker-compose.yml

version: '3'
services:
    web:
        build: .
        ports:
            - 80:80
        volumes:
            - ./src:/var/www/html

Dockerfile

FROM php:7.1-apache

ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

N'oubliez pas d'exécuter construction de docker-compose avant de lancer l'image (si quelqu'un d'autre a le même problème).

3voto

T30 Points 170

Pour tester des solutions temporaires, vous pouvez modifier manuellement le fichier apache .conf. Lorsque votre conteneur est en cours d'exécution, entrez dans la commande bash :

docker exec -it your_container_name bash

Modifiez le contenu du fichier .conf :

vim /etc/apache2/sites-available/000-default.conf

(si vim n'est pas trouvé, lancez apt-get update y apt-get install vim )

Enfin, rechargez apache :

/etc/init.d/apache2 reload

-1voto

Abdul Jabbar Points 156

Vous exécutez la commande sed dans la "section environnement". Au lieu de cela, vous pouvez utiliser la section "command" pour exécuter votre commande sed. Ces commandes seront exécutées après le point d'entrée de Docker. Ainsi, votre docker-compose.yaml mis à jour ressemblera à ce qui suit :

 version: '3'

services:
    laravel:
        image: php:7.1-apache
        ports:
            - 8080:80

        command:
            - export APACHE_DOCUMENT_ROOT=/path/to/new/root
            - sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
            - sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

        volumes:
            - ./src/:/var/www/html/

Veuillez mettre à jour votre fichier docker-compose.yaml et faites-moi savoir si cela résout votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X