Running virtual hosts in apache docker container
Here is a solution -- Step by Step:
Step 1:
Add/Update extra_hosts
, hostname
, domainname
and in docker-compose.yml
and in my case I'm running it over PORT 80
.
This is how my php
service looks like in docker-compose.yml
file.
php: build: . image: php:7.2-apache working_dir: /var/www/html volumes: - ./:/var/www/html - ./php.ini:/usr/local/etc/php/php.ini extra_hosts: - "lara.local:127.0.0.1" hostname: lara.local domainname: local ports: - 80:80 environment: - "DB_PORT=3306" - "DB_HOST=database"
Step 2:
Update your hosts
file with following line:
127.0.0.1 lara.local
Step 3: Test our hostname by running this command
docker exec -it <your-php-container-name> hostname
If you see output lara.local
then you are good to go!
Step 4: Rebuild app
docker-compose build
Step 5: Start the services and check the app is running at http://lara.local
docker-compose up -d
Note: If you are using a different port for example 8080
then it would be http://lara.local:8080
PS. If you want to change the
DocumentRoot
then ssh to your container andcd /etc/apache2/sites-available/000-default.conf
and change DocumentRoot path as per your needs.
Thanks to @David Maze I found the problem I added the listen directives to the top of my apache configuration and changed the port numbers.
docker-compose.yml
version: '3.2'services: php-apache: build: context: ./apache-php ports: - 80:80 - 8060:8060 volumes: - ./DocumentRoot:/var/www/html:z
Apache config
Listen 80Listen 8060<VirtualHost *:8060> DocumentRoot /var/www/html/api ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost><VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
Directory structure
apache-php ¬ sqlite3_ext ¬ 000-default.conf (Apache config) ¬ Dockerfile ¬ php.inidocker-compose.yml
Dockerfile
FROM php:7.2.1-apacheRUN docker-php-ext-install pdo pdo_mysql mysqli# Enable apache rewriteCOPY 000-default.conf /etc/apache2/sites-available/000-default.conf#Install spatialite and create symlink for libproj.so.0COPY sqlite3_ext /etc/sqlite3_extRUN apt-get update && apt-get -y install gdal-binRUN ln -s /usr/lib/x86_64-linux-gnu/libproj.so.12 /usr/lib/x86_64-linux-gnu/libproj.so.0#Install gd library for imagesRUN apt-get install libpng-dev libfreetype6-dev libjpeg62-turbo-dev -qy \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install gd#Copy php iniCOPY php.ini /usr/local/etc/php/php.iniRUN a2enmod rewrite