Мы хотим докеризовать приложение Laravel, готовое к развертыванию на AWS ECR / ECS. Мы провели несколько тестов, но у нас возникли проблемы с конфигурацией apache.
Мы создали следующий файл Docker:
FROM php:7.4-apache
WORKDIR /var/www/html
# Copy composer.lock and composer.json
COPY composer.lock* composer.json* /var/www/html/
# install all the dependencies and enable PHP modules
RUN apt-get update && apt-get upgrade -y && apt-get install -y \
procps \
nano \
git \
unzip \
libicu-dev \
zlib1g-dev \
libxml2 \
libxml2-dev \
libreadline-dev \
supervisor \
cron \
libzip-dev \
libpng-dev \
&& docker-php-ext-configure pdo_mysql --with-pdo-mysql=mysqlnd \
&& docker-php-ext-configure intl \
&& docker-php-ext-install \
pdo_mysql \
sockets \
intl \
opcache \
zip \
gd \
&& rm -rf /tmp/* \
&& rm -rf /var/list/apt/* \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# disable default site and delete all default files inside APP_HOME
RUN a2dissite 000-default.conf
# put apache and php config for Laravel, enable sites
COPY ./docker/general/laravel.conf /etc/apache2/sites-available/laravel.conf
RUN a2ensite laravel.conf
# enable apache modules
RUN a2enmod rewrite
RUN a2enmod ssl
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -sL https://deb.nodesource.com/setup_12.x -o nodesource_setup.sh
RUN bash nodesource_setup.sh
# NPM for frontend builds
RUN apt-get install nodejs
RUN rm nodesource_setup.sh
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY ./ /var/www/html
# Copy existing application directory permissions
COPY --chown=www:www . /var/www/html
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 80
и docker -compose.yml:
version: '3'
services:
laravel: &laravel-template
image: laravel:latest
build:
context: .
args:
- "BUILD_ARGUMENT_ENV=dev"
- "BUILD_ARGUMENT_DEBUG_ENABLED=false"
dockerfile: ./Dockerfile
container_name: laravel
expose:
- 80
ports:
- 8080:80
volumes:
- .:/var/www/html
Когда мы развертываем приложение, оно не показывает никаких ошибок, но мы полагаем, что это из-за открытия порта, если мы попытаемся запустить его локально с помощью docker run -it -p 8080:80 tok
, оно покажет:
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
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
Мы что-то упускаем?