I am trying to set up an environment for Laravel, and in that process I want to change my document root into a public folder. I made this work in a Dockerfile, but in reality I much rather want it in a docker-compose.yml file.
I feel that I have implemented the required environment commands from their documentation
My code looks as
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
I first tried without the .env file, but then it gave me an error stating that the APACHE_DOCUMENT_ROOT variable was not set. Which is why I have the external .env file.
Can anybody lead me in a direction for improving this yml, so I have a different document root for my Apache?
Thank you in advance.
I found a solution for this issue. basically, it worked when I created a Dockerfile with build commands. So the following structure fixed the issue:
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
Just remember to run docker-compose build before running the image (if anybody else have the same problem).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With