リモートデータベースから情報を取得するマイクロサービスを開発しようとしていますが、コンテナーを実行すると、そのデータベースへの接続に失敗します。
コンテナはローカルで実行されており(私はまだ開発中です)、データベースはAWS RDS AuroraMySQLでホストされています。
データベースは、コンテナーで使用しようとしている同じユーザーを使用する複数の本番Webサイトで使用されています。ユーザーにはデータベースへの完全なアクセス許可があり、ローカルのPHPMyAdminは同じユーザーを使用してデータベースに接続し、データベースの管理に問題はありませんでした。
問題は、コンテナ内のデータベース接続がアクセス拒否エラーで失敗することです。
データベースユーザーはdbuser@%
まだセットアップされていますが、エラーは次のようになっています。
ユーザー 'dbuser' @ '[my public ip]'のアクセスが拒否されました(パスワードを使用:YES)。
に別のアカウントを追加しようdbuser@[my public ip]
としましたが、ワイルドカードホストアカウントと同じ権限を付与しましたが、違いはありません。
別のテストとして、コンテナー内にcurl呼び出しを追加して外部ページをロードし、外部接続を確立して成功することを確認しました。意味をなさないのは、データベース接続の失敗だけです。
私のdockerfileは次のようになります:
FROM php:7.2-apache
RUN apt-get update
RUN docker-php-ext-install mysqli pdo pdo_mysql
RUN a2enmod rewrite
誰かがこれに出くわしたり、私がここで何が欠けているのかを知っていることを願っています。
前もって感謝します!
いくつかの詳細情報:
Docker forWindowsとdocker-composeを使用してコンテナーを実行しています。私のdocker-compose.ymlファイルは次のようになります:
version: "3"
services:
web:
image: repository/container:latest
volumes:
- ./src:/var/www/html
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- inv
networks:
inv:
APIから元の接続コードをコピーし、コンテナー内の接続コードをそれに置き換えることで、これを修正することになりました。
壊れたコードをコメントアウトして2つを比較しましたが、違いは見られません。ホスト文字列に引用符、タイプミス、意味のあるものはありません。
唯一の違いは、ホスト文字列を作成する変数を設定する方法です。これらの変数の値は同じであるため、実際には意味がありません。
とにかく、これを行うと修正されました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加