_NNN_
@_NNN_ (hehe hehe)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

docker exec -it myapp bashコマンドで AH00534: apache2: Configuration error: No MPM loaded.エラーが出る

環境

構築する環境は以下の通りです。

ホスト
Docker 20.10.10

コンテナ
PHP 7.3
Apache 2.4
MySQL 5.7.29
PHPMyAdmin

症状


一通りファイルを作成した後に'''$ docker-compose up'''コマンドでコンテナ起動し、myappフォルダの作成を確認して必要なファイルを作成した後にphpコンテナに接続しようと思いdocker exec -it myapp bashコマンドを実行した際にタイトルのようなエラーログが出てしまいうまく実行できなく、myappコンテナの起動状態もrunningにならないといったものです。

おそらくうまくmpmがロードできないからこのようなエラーが出てるのかと思いますが、調べてみても解決策が出てこなく途方に暮れてたので質問しました。

mysqlは正常に起動しrunningになり、指定したmyappフォルダも無事作成されました。
下記がそれぞれのファイルの記述内容です。

構成

projaect
├── docker
│   ├── docker-compose.yml
│   └── php-apache
│       ├── apache2.conf
│       └── php.ini
│       └── Dockerfile
└── myapp (Laravelプロジェクト)
    ├── app
   ・・・
    └── startup.sh

ファイル記述内容

Dockerfile↓

FROM php:7.3-apache

COPY --from=composer /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y \
    unzip \
    libzip-dev \
    zlib1g-dev \
    && docker-php-ext-install \
    zip \
    pdo_mysql \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* \
    && a2enmod rewrite
COPY ./apache2.conf /etc/apache2/apache2.conf
COPY ./php.ini /usr/local/etc/php/php.ini

WORKDIR /var/www/myapp

apache2.confはコンテナ内から該当のファイルをコピーしてきて下記を追加しました。

project/docker/php-apache/apache2.conf
~省略~

<VirtualHost *:80>
    ServerName myapp.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/myapp/public

    <Directory "/var/www/myapp">
            AllowOverride All
    </Directory>
</VirtualHost>
project/docker/docker-compose.yml
version: "3"
services:
  mysql:
    image: mysql:5.7.29
    container_name: mysql    
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: default
      MYSQL_USER: default
      MYSQL_PASSWORD: secret
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
  app:
    build: php-apache
    container_name: myapp
    ports:
      - '8000:80'
    volumes:
      - ../myapp.:/var/www/myapp:cached
myapp/.env.example
DB_HOST=mysql
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
myapp/startup.sh
cp .env.example .env
composer install
touch /var/www/myapp/storage/logs/laravel.log
chmod -R 777 /var/www/myapp/storage
chmod -R 777 /var/www/myapp/bootstrap
php artisan key:generate
php artisan migrate
php artisan db:seed
0

1Answer

その構成で docker-compose up したところ myapp はエラーを出さずに起動しました。

myapp  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.38.3.3. Set the 'ServerName' directive globally to suppress this message
myapp  | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.38.3.3. Set the 'ServerName' directive globally to suppress this message
myapp  | [Wed Nov 24 06:05:03.203878 2021] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.51 (Debian) PHP/7.3.33 configured -- resuming normal operations
myapp  | [Wed Nov 24 06:05:03.203950 2021] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

docker-compose down して up し直したら治るかもしれません。

また、この回答が参考になるかもしれません。 https://stackoverflow.com/questions/48525092/docker-httpd-configuration-error-no-mpm-loaded

もしかしたら apache2.conf をコンテナからコピーしてくるときに写し間違えているのかもしれません。 apache2.conf を上書きするより、必要な設定だけ書いた myapp.conf を /etc/apache2/sites-available に置いて a2ensite で有効にするといいです:

myapp.conf
<VirtualHost *:80>
    ServerName myapp.com
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/myapp/public

    <Directory "/var/www/myapp">
            AllowOverride All
    </Directory>
</VirtualHost>
Dockerfile
#COPY ./apache2.conf /etc/apache2/apache2.conf
COPY ./myapp.conf /etc/apache2/sites-available/
RUN a2ensite myapp.conf
0Like

Comments

  1. @_NNN_

    Questioner

    試しにdocker system prune -afコマンドで使ってないオブジェクトなどを全部消してもう一度docker-compose upコマンドで入れ直してみたら起動確認できました。
    その後のdocker exec -it myapp bashコマンドも通りました。

Your answer might help someone💌