2017-08-18 8 views
0

私はEC2インスタンス(EC2_IP)にスプリングブートドッカーコンテナを設定しましたが、別のVMでMySQLをホストしています。私は、mysqlホスト(MYSQL_IP)がドッカーコンテナをホストしているEC2インスタンスからアクセス可能であることを確認しました。外部MySQLホストにアクセスするDockerコンテナ

ドッカーの実行中にdocker環境変数を使用してspring.datasource.urlパラメータを渡しています。

エラーメッセージが表示され、ユーザーに拒否されたバネ起動アプリがエラーdb_user @ EC2_IPです。これは私が理解し解決できない部分です。私はなぜそのEC2_IPに接続しようとしているのか理解していないdb_user @ MYSQL_IPの代わりに。

ドッカーの検査を行いました。spring.datasoure.urlの環境変数が正しく渡され、db_user @ MYSQL_IP:3306であることを確認しました。

私はこの問題を解決しようと数時間を費やしましたが、運はありません。どんな助けもありがとうございます。

コメントに基づいて明確にするために、データソースを正しく設定しました。

-Dspring.datasource.url = JDBC:ドッキングウィンドウ内

は、Argsの値を調べるmysqlの:// MYSQL_IP:3306 /テストも

、私がチェックし、私はいくつかの不正なIPを渡す場合(たとえば、 )いくつかのランダムなテキストは、ホストが無効であると言うエラーを投げます(これは、私が渡すホストを取っていることを確認します)。ただし、外部IPに設定すると、ホストIPアドレス(EC2_IP)に解決されるようです。

+0

あなたはsprint-bootドッカーコンテナの中に入り、telnet sqlhost 3306を実行できますか? – lvthillo

+0

'spring.datasource.url'はパスワードとユーザーがマスクされているように見えますか? –

答えて

1

は最後に、私のDBのユーザー権限でその問題を、問題を考え出しました。 これは私のmysqlユーザーのアクセス許可に問題があることが判明しました。それはドッカーやスプリングブートの問題ではありませんでした。

Access denied for user 'test'@'localhost' (using password: YES) except root user

だけ私ははっきりと、エラーメッセージに焦点を当て、それは私がすべての人の時間を無駄にしないだろう、言ったことを理解している場合。

2

あなたはhere問題がspring.datasource.urlであるように思わ

1

を指定し、両方の

spring.datasource.url=jdbc:mysql://localhost/test 
spring.datasource.username=dbuser 
spring.datasource.password=dbpass 

として設定する必要があります。

[email protected]_host:port 

ではなく、の:

driver_class:db_type://db_host:db_port/db_name 

例えば:フォーマットのことになっていない

jdbc\:mysql\://localhost\:3306/test 

各コロンの前にエスケープバックスラッシュ\注:

デフォルトのmysqlのポートを使用して、あなたはて残すことができた場合:official documentation hereをチェックし、参考のため

jdbc\:mysql\://localhost/test 

:3306一部を。

1-アプリケーションでは、次のようになります。プロパティ:

spring.datasource.url=jdbc\:mysql\://${DATABASE_HOST}\:${DATABASE_PORT}/${DATABASE_NAME} 
spring.datasource.name=${DATABASE_USER} 
spring.datasource.password=${DATABASE_PASSWORD} 

2 - ドッキングウィンドウの実行を実行する:

docker run -p 8080:8080 image_name_or_id \ 
    -e DATABASE_HOST='MYSQL_IP' \ 
    -e DATABASE_USER='db_user' \ 
    -e DATABASE_PASSWORD='db_pass_for_db_user' \ 
    -e DATABASE_NAME='db_name' \ 
    -e DATABASE_PORT='3306' 
関連する問題