I recently wanted to setup a new Ubuntu 16.04 host running Apache under Docker for some AWS ECS/Fargate testing I was doing and encountered the following error:
docker run -p 8085:80 aws-ecr-hello-world:v0.5 [Thu Mar 15 00:11:31.074011 2018] [core:warn] [pid 1] AH00111: Config variable ${APACHE_LOCK_DIR} is not defined [Thu Mar 15 00:11:31.074576 2018] [core:warn] [pid 1] AH00111: Config variable ${APACHE_PID_FILE} is not defined AH00526: Syntax error on line 74 of /etc/apache2/apache2.conf: Invalid Mutex directory in argument file:${APACHE_LOCK_DIR}
This is a typical Ubuntu problem where the /etc/apache2/envvars file needs to be sourced before apache2 can start properly. To figure out which ones needed to be added, I commented out the CMD to start apache and instead entered a command to print out the contents of the envvars file. I also added a sed command to print out line 74 of the apache2.conf file so I could further troubleshoot what was happening there.
# Dockerfile ... CMD ["cat", "/etc/apache2/envvars"] CMD ["sed", "-n", "74p", "/etc/apache2/apache2.conf"] ...
This output showed that I had to add a few environment variables to the Dockerfile, and verify that they exist when I run the container:
# Dockerfile ... ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_PID_FILE /var/run/apache2/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_LOG_DIR /var/log/apache2 RUN mkdir -p $APACHE_RUN_DIR RUN mkdir -p $APACHE_LOCK_DIR RUN mkdir -p $APACHE_LOG_DIR ...
I also verified that the directories would exist to prevent any issues there:
# Dockerfile ... RUN mkdir -p $APACHE_RUN_DIR RUN mkdir -p $APACHE_LOCK_DIR RUN mkdir -p $APACHE_LOG_DIR ...
After I finished that, I rebuilt the image and was able to run the container without issues.
The full Dockerfile is:
FROM ubuntu:16.04 # Install dependencies RUN apt-get update -y RUN apt-get install -y apache2 # Install apache and write hello world message RUN echo "Hello World!" > /var/www/index.html # Configure apache RUN a2enmod rewrite RUN chown -R www-data:www-data /var/www ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_PID_FILE /var/run/apache2/apache2.pid ENV APACHE_RUN_DIR /var/run/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_LOG_DIR /var/log/apache2 RUN mkdir -p $APACHE_RUN_DIR RUN mkdir -p $APACHE_LOCK_DIR RUN mkdir -p $APACHE_LOG_DIR EXPOSE 80 # CMD ["sed", "-n", "74p", "/etc/apache2/apache2.conf"] # CMD ["cat", "/etc/apache2/envvars"] CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
Build the container image:
> docker build -t aws-ecr-hello-world:v0.9.1 . Sending build context to Docker daemon 2.56kB Step 1/18 : FROM ubuntu:16.04 ---> f975c5035748 Step 2/18 : RUN apt-get update -y ---> Using cache ---> 1716ac62d2f6 Step 3/18 : RUN apt-get install -y apache2 ---> Using cache ---> b03c08c103b5 Step 4/18 : RUN echo "Hello World!" > /var/www/index.html ---> Using cache ---> a8352375b937 Step 5/18 : RUN a2enmod rewrite ---> Using cache ---> 313f2e8046ec Step 6/18 : RUN chown -R www-data:www-data /var/www ---> Using cache ---> c2e7512d4fe8 Step 7/18 : ENV APACHE_RUN_USER www-data ---> Using cache ---> 2054c48681ae Step 8/18 : ENV APACHE_RUN_GROUP www-data ---> Using cache ---> 493b20667534 Step 9/18 : ENV APACHE_LOG_DIR /var/log/apache2 ---> Using cache ---> 8c5029eb8e83 Step 10/18 : ENV APACHE_PID_FILE /var/run/apache2/apache2.pid ---> Using cache ---> 701ddcccf335 Step 11/18 : ENV APACHE_RUN_DIR /var/run/apache2 ---> Using cache ---> 6700b8a02ca0 Step 12/18 : ENV APACHE_LOCK_DIR /var/lock/apache2 ---> Using cache ---> ac692e86caf7 Step 13/18 : ENV APACHE_LOG_DIR /var/log/apache2 ---> Using cache ---> 660af37232bc Step 14/18 : RUN mkdir -p $APACHE_RUN_DIR ---> Running in 02978786f1b5 Removing intermediate container 02978786f1b5 ---> 3e5ef0c00431 Step 15/18 : RUN mkdir -p $APACHE_LOCK_DIR ---> Running in 68408f3091c1 Removing intermediate container 68408f3091c1 ---> 90efa3a2f9bc Step 16/18 : RUN mkdir -p $APACHE_LOG_DIR ---> Running in f1ee7e4d5a4b Removing intermediate container f1ee7e4d5a4b ---> 9fb6a50c6792 Step 17/18 : EXPOSE 80 ---> Running in f3fd904326e4 Removing intermediate container f3fd904326e4 ---> b4ba8575620d Step 18/18 : CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"] ---> Running in a3cba653d7b3 Removing intermediate container a3cba653d7b3 ---> 0bfa187abf69 Successfully built 0bfa187abf69 Successfully tagged aws-ecr-hello-world:v0.9.1
Run the container:
> docker run -p 8085:80 aws-ecr-hello-world:v0.9.1 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
UPDATE: it looks like James Turnbull had already solved this problem here.
Leave a Reply