2017-06-28 10 views
0

私は2つのドッカーコンテナを持っています。 1つは、標準のMariaDBイメージに基づいています。コンテナの名前は「mariadb」で、内部には「fi」というデータベースが1つあります。 fiデータベースには、いくつかのテーブルがあり、それぞれに2行のデータがあります。 DataGripやその他のデータベース閲覧ソフトウェアを使用して、ポート3306を使用してローカルホスト上で呼び出すこのデータベースに正常にアクセスして照会することができます。別のドッカーから1つのドッカーのMariaDBにアクセス

2番目のDockerコンテナは、MariaDBのデータにアクセスする必要があるSpring起動アプリケーションを実行します。ドッカーでMariaDBを実行し、ホストマシン上のSpringBootアプリケーションを実行すると、接続文字列「jdbc:mariadb:// localhost:3306 /?user = myUsername & password」を使用して、ドッカー内のMariaDBに正常にアクセスできます。 = myPassword "私の問題は、両方を別々のDockersで実行しようとすると、Springブートアプリケーションがデータベースにアクセスできなくなることです。私は、2人のドッカーを「リンク」すると言っている人がたくさんいますが、これは問題を解決していないようです。私がSpring Bootドッカーを実行すると、 "docker run -i -p 8080:8080 --link mariadb:db javaImage/bin/bash"というコマンドを実行します。この問題に関連しない理由で8080ポートを公開しています。私が理解しているところで、彼らは今や、 "db"というキーワードでアクセス可能な私のSpring Bootドッカーの中の環境変数になります。これは、MariaDBドッカーの実際のIPである環境変数に置き換えられます。

現在のところ、私のJavaコードでは、接続文字列「jdbc:mariadb:// db:3306/fi?user = myUsername & password = myPassword」を使用しています。この接続は、「接続できませんでした:不明なデータベース 'fi'」というエラーが返されます。これは、この接続が本当にMariaDBドッカーに接続していた場合に、fiデータベースが検出されるためです。

何か助けていただければ幸いです。 ありがとう!

編集:コードスニペット

 Connection connection = DriverManager.getConnection("jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword"); 
     Statement stmt = connection.createStatement(); 
     ResultSet rs = stmt.executeQuery("SELECT * FROM ...;"); 

上図のように接続文字列への変更は、以下の推奨通りに作られます。次に、コマンド "run -i -p 8080:8080 --link mariadb javaImage/bin/bash"を使用してコンテナを実行します。接続しようとしたときにこのエラーが発生すると、同じ結果が表示されます。「接続できませんでした:不明なデータベース「fi」」

+0

私はお勧めの平均時間は、特にコードスニペットを引用し、ガイドラインに従ってご質問をフォーマットします。 – techtabu

答えて

3

コンテナの名前がmariadbの場合は、dbではなくurlで使用する必要があります。

あなたのリンクに
jdbc:mariadb://mariadb:3306/fi?user=myUsername&password=myPassword 

また、あなたがmariadbを使用する必要があり、

docker run -i -p 8080:8080 --link mariadb javaImage /bin/bash 
+0

質問の編集:と以下のコンポーネントをご覧ください。問題を解決したようではなく、接続文字列と実行コマンドの両方を変更しました。 – dFrancisco

+1

"docker ps"を実行したときに得られる結果を投稿できますか?また、ローカルのmysqlインスタンスがあなたのコンピュータで実行されている可能性はありますか?localhostを使用するときに接続している可能性がありますか? – techtabu

+0

うん、私は問題を理解した、あなたは正しい。私が私がDocker MariaDBにテーブルを挿入していると思ったときに、それらをホストdbに挿入しようとしていたホストマシンに、他のいくつかのローカルMySQL DBがありました(私が気付いていなかった)。私は実際にテーブルを実際のDocker MariaDBに正しく挿入しました。ありがとうございました – dFrancisco

関連する問題