phpMyAdminをマルチステージビルドでインストールしようとして、結局うまくいかなくて諦めたので、それについて書いておこうと思います。
問題:phpMyAdminにはアクセスできるけどログインできない

この問題がずっと解決しなくて、これを解決するために、かなりの時間を費やしましたが問題も解決しなくて、情報もあまりないので、結局phpMyAdminを別でコンテナを作成することにしました。ちなみに、CodeIgniter4側からは普通にDBアクセスできていましたので、マルチステージビルドしたphpMyAdmin固有の問題です。
この問題を解決するために多くの時間を費やして、解決したとしても、得られるものは /phpMyAdmin
でアクセスができることと、容量の節約のみで、実際にデプロイするアプリには何も影響がありませんので、費やす労力と見合っていないと判断して、容量役500MBを犠牲に、労力を節約しました。
結論:phpMyAdminは別コンテナで用意
もし、マルチステージビルドでphpMyAdminをインストールして、DBにログインできている方がいらしたら、どのような設定を行ったのか、是非お聞かせ願いたいです。
自分の場合は費やす労力に対して、得られる対価が見合っていないと判断して、この問題の解決は諦めました。でも、phpMyAdminをマルチステージビルドでインストールする方が、最適化されているように思えるので、もし解決策が見つかれば、その方法を使いたいと思います。
最終形
最終的にphpMyAdminのコンテナを作成して、この開発環境用にネットワークを設定するように変更を加えましたので、最終形を記載しておきたいと思います。サービス名とかポート番号とかも変更を加えてますので、ご注意ください。
Dockerfile.dev
# ベースイメージにPHP8.3-Apacheを使用
FROM php:8.3-apache
# マルチステージビルドでComposerをインストール
COPY --from=composer:2.7.9 /usr/bin/composer /usr/bin/composer
# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
libicu-dev \
libonig-dev \
libzip-dev \
unzip \
&& docker-php-ext-install pdo pdo_mysql mysqli intl
# Apacheのmod_rewriteを有効化
RUN a2enmod rewrite
# アプリケーションコードをコンテナにコピー
COPY ./src /var/www/html/
# Composerで開発用の依存関係もインストール
RUN composer install --prefer-dist --optimize-autoloader --working-dir=/var/www/html
# writableディレクトリに書き込み権限を付与
RUN chown -R www-data:www-data /var/www/html/writable && chmod -R 775 /var/www/html/writable
# ApacheのDocumentRootをCodeIgniterのpublicディレクトリに変更
RUN sed -i 's|/var/www/html|/var/www/html/public|' /etc/apache2/sites-available/000-default.conf
# PHPの設定ファイルをコピー
RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"
# Apacheが使用するポート80を公開
EXPOSE 80
# Apacheの起動
CMD ["apache2-foreground"]
docker-compose.yml
services:
# PHP
app:
build:
context: .
dockerfile: ./docker/Dockerfile.dev
ports:
- "8000:80"
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db
volumes:
- ./src:/var/www/html
depends_on:
- db
networks:
- network
# MySQL
db:
image: mysql:8.0.39
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: aidataanalyzer
MYSQL_USER: developer
MYSQL_PASSWORD: developer
TZ: Asia/Tokyo
ports:
- "3306:3306"
volumes:
- volume:/var/lib/mysql
networks:
- network
# phpMyAdmin
phpmyadmin:
image: phpmyadmin:latest
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_USER: developer
PMA_PASSWORD: developer
ports:
- "8080:80"
networks:
- network
volumes:
volume:
# 定義されたネットワーク
networks:
network:
driver: bridge