質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Q&A

2回答

1160閲覧

Docker上でSpring Boot, MyBatisでコネクションが取得できない

t.i.se

総合スコア6

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

0グッド

0クリップ

投稿2018/03/19 16:48

前提・実現したいこと

JavaでWebシステムを開発しようとしています。
今後の開発開始に使えるよう、認証機能までを持ったブランクプロジェクトを作って置きたいと考えています。

構成

  • Docker
    • compose
  • JDK8+Maven Dockerイメージ
    • Spring Boot, MyBatis, Thymeleaf, Log4J2
  • MySQL公式Dockerイメージ
  • PHPMyAdmin 公式Dockerイメージ

発生している問題・エラーメッセージ

Unable to create initial connections of pool. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

WebアプリからDBへのコネクション取得に失敗しています。
PHPMyAdminからはDBへアクセスできているので、Docker composeの誤記は考えにくいです。

該当のソースコード

version: '3' services: db: image: mysql:5.7.21 hostname: dbserver ports: - "3306:3306" volumes: - ./db_data:/var/lib/mysql environment: - MYSQL_ROOT_USER=root - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=myproject_db app: image: jamesdbloom/docker-java8-maven ports: - "8080:8080" volumes: - .:/app working_dir: /app links: - db command: ./mvnw spring-boot:run phpmyadmin: image: phpmyadmin/phpmyadmin ports: - "8888:80" volumes: - "./phpmyadmin/sessions:/sessions" environment: - PMA_ARBITRARY=1 - PMA_HOST=db - PMA_USER=root - PMA_PASSWORD=root links: - db
# DatSource # ---------------------------------------- spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://dbserver:3306/myproject_db spring.datasource.username=root spring.datasource.password=root
@Mapper public interface UserMapper { // アカウントを登録する public int insert(User user); // アカウント情報を更新する public int updateByUid(Integer uid, User user); // アカウントを論理削除する public int deleteLogicallyByUid(Integer uid, Integer delFlag); // アカウントを検索する public List<User> findAll(); public User searchByUid(Integer uid); public User searchByEmail(String emailAddress); public int isExists(User user); }

試したこと

設定ファイルの形式を変えてみたり、ネットで検索して見つけた方法を試してみました。

混乱しているのが、
ネットではH2などの組み込み系DBで構築する方法であったり、Springの設定方法とSpring Bootの設定方法(自動設定もできる)、SpringのDBアクセスの書き方でJDBC Template, JPA, MyBatisなど組み合わせが多く、参考にできる構成が見つからないというのがあります。

知見のある方にぜひご指導いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

コンテナ間での通信という内容でしょうか?読み間違いや勘違いがあったらすみません。

docker composeのlinksで特定文字列をコンテナ内のホスト名として扱うことができますので、docker composeに該当箇所のlinksと開放するポートのportsを書くのが良いのではないでしょうか。
ただ上記の方が回答されているように、物理的に通信が阻害されてるかどうかの検討が必要ですので、例えばVirtualBoxなどであればポートフォワードができてるかどうかでしょうか?

投稿2018/03/21 16:13

編集2018/03/21 16:25
nekt

総合スコア38

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず原因の特定のためにも
物理的(というか仮想的?)にdbサーバとapサーバが繋がるか確認したほうがいいかと思います。

  • apサーバからdbサーバのIP指定で繋がるか。
  • apサーバからdbサーバのhostnameで繋がるか。

Spring-db間ではなく、先にサーバ間の通信ができているか。

ネットで参考文献を探したり、設定ファイルを見直す前に、
各コンテナを立ち上げた状況を把握されたほうが、
解決が早いと思います。

ボクはあまり詳しくないですが、docker networkコマンドで色々確認できます。

タグにdockerを追加したほうがいいかもしれません。

投稿2018/03/20 04:20

szk.

総合スコア1400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t.i.se

2018/04/01 10:34

docker network ls でbridgeは設定されているので、コンテナ間のネットワークは繋がっているようです。
szk.

2018/04/02 02:26

>コンテナ間のネットワークは繋がっているようです。 と言われると、  「繋がるはずです」 としか言いようがないのですが、、、 例えば、 ・双方向で両サーバからpingが通る ・dbサーバからcurlでapサーバのapacheに繋がる など、具体的な確認をしたほうが、解決するのが早いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問