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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

3回答

2074閲覧

dockerを用いたデータベースの立て方

naonao11

総合スコア97

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2019/05/04 18:53

編集2022/01/12 10:55

spring boot を用いてAPIを作成しているのですが、docker-composeがうまく起動してくれません。。。
以下コード
docker-compose.yml

version: '3' services: nginx: build: context: ./docker/nginx ports: - 80:8080 links: - app app: build: context: ./docker/app command: ./gradlew bootRun volumes: - .:/app - ./src/main/resources/log:/log depends_on: - dbserver environment: ENV: default JAR_TARGET: restfulapi-0.0.1-SNAPSHOT.jar expose: - 8090 dbserver: image: mysql:5.7 command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci environment: MYSQL_DATABASE: db_product MYSQL_USER: root2 MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: 'true' ports: - 3306:3306

jdk DockerFile

FROM ubuntu:16.04 RUN apt-get update RUN apt-get -y install openjdk-8-jdk RUN mkdir /app WORKDIR /app ENTRYPOINT ["sh","-c","java -jar -Dspring.profiles.active=${ENV} build/libs/${JAR_TARGET}"]

nginx Dockerfile

FROM nginx:1.15.0 ADD nginx.conf /etc/nginx/conf.d/nginx.conf

nginxの設定

server { listen 8080; charset utf-8; access_log off; location / { proxy_pass http://app:8090; proxy_set_header Host $host:$server_port; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static { access_log off; expires 30d; alias /app/static; } }

application.yml

spring: main: allow-bean-definition-overriding: true jpa: hibernate: ddl-auto: update show-sql: true datasource: url: jdbc:mysql://localhost:3306/db_product?useSSL=false username: root2 password: password

起動方法

docker-compose up -d --build

このように行うと以下のようなエラーが出てきます。

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server

databaseに繋がっていないのがなぜなのか今ひとつ理解できません。。。
ご助力よろしくお願いします。。。

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

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

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

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

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

guest

回答3

0

DB(mysql)を別コンテナで起動しているのに、mysql接続先がlocalhostなので接続できないのでは?

application.yml

json

1 datasource: 2 url: jdbc:mysql://localhost:3306/db_product?useSSL=false

接続先サーバ名を、コンテナのサービス名 dbserver に変更してみてはいかがでしょうか?

json

1 datasource: 2 url: jdbc:mysql://dbserver:3306/db_product?useSSL=false

投稿2019/05/10 23:40

satotka

総合スコア10

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

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

naonao11

2019/05/11 19:16

ありがとうございます! dbserverにしても変わらずでした。。。 mysqlのサーバに入って、起動確認したのちにjdkを回しても回らずです。。。
satotka

2019/05/12 00:04

「dbserver」」については、既にコメントついてましたね。失礼しました。 mysqlのエラーメッセージを調べてみました。 ```com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure``` http://atsuizo.hatenadiary.jp/entry/2017/12/05/000000 このエラー内容から、DB接続は問題ない気がしてます。 DockerとSprint Bootの問題を切り分け出来ますか?
guest

0

docker-composeはlinksなどにより起動順を最適化してくれますが、runする順番を守るだけで、サービスが準備完了かどうかは知りません。

appサーバーが起動時にDatabase情報が必要な場合は、Databaseが使用可能かの確認を行い、Databaseが使用可能になればサービスを起動するようにする必要があります。

公式ドキュメントではpostgresでの接続例が記載されています。

https://docs.docker.com/compose/startup-order/

投稿2019/05/05 05:52

mosapride

総合スコア1480

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

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

0

mysqlのコンテナイメージは起動に少し時間がかかります。

appでdepends_onに指定しているので、appよりも前にmysqlのコンテナの起動は行われますが、処理できるようになる前にappのコンテナが起動してしまいます。

docker-compose build docker-compose up -d dbserver

としてビルドしてから先にデータベースを起動し、しばらく待ってから

docker-compose up -d

としてはどうでしょうか?

投稿2019/05/04 22:33

mobilefan8

総合スコア85

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

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

naonao11

2019/05/05 05:38

ありがとうございます! 間を5分待っても同じエラーがでました。。。
mobilefan8

2019/05/05 06:23

application.ymlのdatasource url、違いますね。 と思ってみたら、docker-compose.ymlも。 1. docker-compose.ymlのappには、dbserverへのlinksが必要です、確か。 2. application.yml のurlは、localhostではなくdbserverです。
naonao11

2019/05/05 07:11

depends_on -> linksに変更 localhost -> dbserver に変更 しましたが変わらずでした。。。
mobilefan8

2019/05/05 09:05

spring bootのエラーは無視して、dbが立ち上がっているかを先に確認したほうがよさそうですね。
naonao11

2019/05/05 10:10

execで入って、mysql command叩いて見たのですが、ちゃんと起動していました。。。 そのあとにspring boot を起動してもdbを見つけてくれませんでした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問