1

複数のプロジェクトで実行するローカル開発環境を取得しようとしています。かなりいじくり回した後、私はこのプロジェクトに出くわし、それを自分のプロジェクトに適応させ始めました。各プロジェクトは、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.

4

1 に答える 1