Build the PHP base image with apache-buster using the Dockerfile.base
Since JN blocks some libraries update and pull, follow the following steps to build the base image locally.
Run the following command to build the base PHP image:
Make sure you are in the project root directory before running the command and its a fresh window after changing the proxy
docker build -f Dockerfile.base -t apachebuster8 .
Errors running docker command
If you experience errors when attempting to run the command above, which might include the following errors:
#8 0.852 Warning: copy(): SSL operation failed with code 1. OpenSSL Error messages:
#8 0.852 error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in Command line code on line 1
#8 0.852
#8 0.852 Warning: copy(): Failed to enable crypto in Command line code on line 1
#8 0.854
#8 0.854 Warning: copy(https://getcomposer.org/installer): Failed to open stream: operation failed in Command line code on line 1
#8 0.894 Could not open input file: composer-setup.php
#8 ERROR: executor failed running [/bin/sh -c EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid installer checksum' rm composer-setup.php exit 1 fi && php composer-setup.php && mv composer.phar /usr/local/bin/composer]: exit code: 1
> [7/8] RUN php composer-setup.php:
#10 0.439 Could not open input file: composer-setup.php
=> ERROR [7/8] RUN php composer-setup.php
=> ERROR [8/8] RUN if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid i 0.5s
------
> [8/8] RUN if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid installer checksum' exit 1 fi &&:
#11 0.472 /bin/sh: 1: Syntax error: end of file unexpected
------
executor failed running [/bin/sh -c if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] then >&2 echo 'ERROR: Invalid installer checksum' exit 1 fi &&]: exit code: 2
curl error 60 while downloading https://getcomposer.org/versions: SSL certificate problem: self signed certificate in certificate chain
The issue
They relate to a similar problem. Being an issue downloading the composer-setup.php file or anything from getcomposer due to SSL certificate. These issues can be experienced when executing the command via mobile data (SIM) or local WIFI.
Work around
Essentially the process is attempting to install a composer.phar file in the Docker image. You can view the current .phar file by going to https://getcomposer.org/versions. Download the stable composer.phar (i.e /download/2.4.2/composer.phar).
Move the composer.phar file to the root of the site directory.
Now you’ll need to change the Dockerfile.base. Block the code at the bottom of the file
# RUN EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')" \
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
# ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" \
# if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ] \
# then \
# >&2 echo 'ERROR: Invalid installer checksum' \
# rm composer-setup.php \
# exit 1 \
# fi && \
# php composer-setup.php && mv composer.phar /usr/local/bin/composer
Add the following
COPY ./composer.phar /tmp/
RUN mv /tmp/composer.phar /usr/local/bin/composer
Try docker command again
docker build -f Dockerfile.base -t apachebuster8 .
Solution
While the steps above work... they only work to a point. The core issue is the certificate.
In the Dockerfile.base file moving the cert.pem file is what's missing.
# CA Certificate
COPY ./nscacert.pem /etc/ssl/certs/nscacert.pem
RUN echo "openssl.cafile = /etc/ssl/certs/nscacert.pem" >> /usr/local/etc/php/php.ini
php\r 'No such file or directory' error
If you find you have the following error occur when attempting a drush command
drush /usr/bin/env: 'php\r': No such file or directory
Using Terminal, go to the root directory of the site and then into content/. Now you can install drush using
composer require drush/drush
Once installed, check Drush is running using any command. I generally use version
drush -V
Response will be similar to
Drush Commandline Tool 11.2.1