複数のプロジェクトで実行するローカル開発環境を取得しようとしています。かなりいじくり回した後、私はこのプロジェクトに出くわし、それを自分のプロジェクトに適応させ始めました。各プロジェクトは、mysql コンテナーと php コンテナー (php-apache
画像から) の 2 つのコンテナーで構成されます。
はnginx-proxy
、ネットワーク上で実行される別個のコンテナーです。プロジェクトの名前を少し変更したので、ここではdev-router_default
.
私のプロジェクトは次のcompose.yml
ようになります。
version: "3"
services:
php:
build: './.docker/php/'
volumes:
- .:/var/www/html/
environment:
- VIRTUAL_HOST=XXX.local
mysql:
build: './.docker/mysql/'
ports:
- "3309:3306"
environment:
MYSQL_DATABASE: XXX
MYSQL_USER: XXX
MYSQL_PASSWORD: XXX
MYSQL_ROOT_PASSWORD: XXX
VIRTUAL_HOST: XXX.local
networks:
default:
external:
name: dev-router_default
これらのdockerfiles
フォルダにあるのは、現時点では基本的なイメージです。それらは存在するだけなので、後でスケールアップできます。
すべてが非常にスムーズに機能します。DB にアクセスでき、html および php ページをロードできます。でも。ページをロードするたびに。このエラーが発生する可能性は 50% です。
SQLSTATE[HY000] [1045] Access denied for user
ページロードの残りの 50% は問題なく動作します。これは間違ったパスワードの問題でも何でもありません。設定はすべて同じままですが、どういうわけか一方の接続が拒否され、もう一方の接続が通過します。
私nginx-proxy
のトラフィックが半分の時間で正しい mysql コンテナーにリダイレクトされていないという直感があります。しかし、電話がどこに送信されているかを見つけることができないようです。ページをロードすると、コンテナ CLI に php_1 ロードのログ ポップアップが表示されます。しかし、mysql_1 は黙っています。
この不一致の原因は何ですか?
複数の仮想ホスト/ドメインを同時に利用する docker で開発環境をセットアップする簡単な方法はありますか?
複数のデータベースにアクセスできるようにする必要があり (すべてのプロジェクトに今すぐ通過する特定のポートを与えることでこれを行います)、各プロジェクトに固有の URL をdocument_root
.