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

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

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

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

6408閲覧

Docker内のMySQLにjdbcで接続したい

cacao86

総合スコア97

MySQL

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Docker

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

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2020/06/04 10:06

編集2020/06/04 12:57

githubからcloneしたmavenプロジェクトを、SpringBoot実行してjdbcを使ってdocker内で作ったmysqlに接続を試みていますがうまくいかずに困っています。DockerでMySQLを動かしてEclipseでTomcatを動かす形にしようと思っています。

application.ymlには
url: jdbc:mysql://127.0.0.1/db_name
username: user_name
password: password
として設定しています。

mysqlにはuser_name@127.0.0.1だったり、user_name@'%'を作ってglobal権限も与えてアクセスを試みているのですが何度やっても下記のエラーが吐かれてします。

access denied for user 'user_name'@'localhost'

user_name@127.0.0.1にアクセスしたいと思っているのですがuser_name@localhostでアクセスしようとしてしまいます。
Docker内からmysql -u user_name -h 127.0.0.1 -pではログインに成功します。
解決策やアドバイスなどがあればご教授お願いいたします!

dbとtableは作成済みです。
開発環境は
MySQL5.7
Mac catalina

追記

~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 07ee0f26247b mysql:5.7 "docker-entrypoint.s…" 9 hours ago Up 9 hours 0.0.0.0:3306->3306/tcp, 33060/tcp container_name local内のMySQL mysql> select user, host from user; +---------------+-----------+ | user | host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ docker内のMySQL +---------------+-----------+ | user | host | +---------------+-----------+ | root | % | | user_name | 127.0.0.1 | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+ SHOW GRANTS FOR user_name@127.0.0.1; +------------------------------------------------------------------------------+ | Grants for user_name@127.0.0.1 | +------------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'127.0.0.1' WITH GRANT OPTION | +------------------------------------------------------------------------------+ user_name@'%'にして同じように権限を与えても接続できませんでした。
07ee0f26247bのENVです "Env": [ "MYSQL_ROOT_PASSWORD=password", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "GOSU_VERSION=1.12", "MYSQL_MAJOR=5.7", "MYSQL_VERSION=5.7.30-1debian10" ~ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/cacao86/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval $(docker-machine env default)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/06/04 10:24

おそらくローカルの mysql にアクセスしてる。 VMBox インストールしなかった?
cacao86

2020/06/04 10:25

インストール済みでございます。
退会済みユーザー

退会済みユーザー

2020/06/04 12:28

docker ps の結果を追記してください。
退会済みユーザー

退会済みユーザー

2020/06/04 12:43

docker inspect 07ee0f26247b で ENV にある MYSQL_ から始まる環境変数が正しく設定されている? ※ 最後の16進数はcontainerIDです。
退会済みユーザー

退会済みユーザー

2020/06/04 12:50

あと docker-machine env default 上記コマンドが成功した場合、追記してください。 出てくる情報だとWAN経由ではアクセスできない情報なので改変せずに
guest

回答2

0

ベストアンサー

$ docker-machine env default export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.100:2376" export DOCKER_CERT_PATH="/Users/cacao86/.docker/machine/machines/default" export DOCKER_MACHINE_NAME="default" # Run this command to configure your shell: # eval $(docker-machine env default)

がかえってきてるので

mysql -u root -h 192.168.99.100 -p -P 3306

のように「127.0.0.1」 ⇒ 「192.168.99.100」としてアクセスしてください。

また

url: jdbc:mysql://192.168.99.100/db_name

こちらも同様に

追記

mysql イメージを利用する場合にユーザー作成が必須な場合は基本こちらを利用しましょう

MYSQL_DATABASE

This variable is optional and allows you to specify the name of a database to be created on image startup. If a user/password was supplied (see below) then that user will be granted superuser access (corresponding to GRANT ALL) to this database.

MYSQL_USER, MYSQL_PASSWORD
These variables are optional, used in conjunction to create a new user and to set that user's password. This user will be granted superuser permissions (see above) for the database specified by the MYSQL_DATABASE variable. Both variables are required for a user to be created.

Do note that there is no need to use this mechanism to create the root superuser, that user gets created by default with the password specified by the MYSQL_ROOT_PASSWORD variable.

投稿2020/06/04 13:07

編集2020/06/04 13:47
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/06/04 13:16

ちなみに docker 公式イメージでユーザーを作成する場合は MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD を設定してユーザーを作成してください。 間違えても 自力で作ってはいけません。(作る場合は ホストは % で)
cacao86

2020/06/04 13:32

url: ://192.168.99.100/db_name username: root password: password にしたら無事接続ができました!が、use_nameで接続はできないのでしょうか? user_name: user_nameで試みたら Access denied for user 'user_name'@'192.168.99.1' (using password: YES) となってしまいます。
cacao86

2020/06/04 13:39

追加でなのですが、 export DOCKER_HOST="tcp://192.168.99.100:2376" この数字を127.0.0.1:2376にすれば url: jdbc:mysql://127.0.0.1/db_name で接続が可能になるということでしょうか?
cacao86

2020/06/04 14:17 編集

>MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD を設定してユーザーを作成してください。 もしかした最初にrunするときに-e MYSQL_DATABASE=db_name MYSQL_USER=user_name MYSQL_PASSWORD=[use_nameのpassword] -p 3306:3306 -d mysql:5.7 としてあげれば良かったということでしょうか?
退会済みユーザー

退会済みユーザー

2020/06/04 14:47

はい、 -e で3つの環境変数でDBとユーザー(+パスワード)を作成してください
cacao86

2020/06/05 02:13

色々とありがとうございました! 拙い説明で何度か困惑させてしまった事だと思います。 お詫び致します。 教えていただいたことを意識して今後も勉強して行きたいと思います。
guest

0

MySQL の Docker コンテナイメージは自作ですか?

Docker Hub で公開されている MySQL のコンテナイメージなら

https://hub.docker.com/_/mysql

記載の手順で特に問題なく接続できるはずなんですが。

mysqlにはuser_name@127.0.0.1だったり、user_name@'%'を作ってglobal権限も与えてアクセスを試みているのですが何度やっても下記のエラーが吐かれてします。

Docker コンテナから見ると、ローカル環境(この場合は macOS のシェルや実行しようとしている maven プロジェクト)は remote です。

なので、Docker コンテナで実行される MySQL に、remote 接続を許可すればよいのではないでしょうか。

投稿2020/06/04 10:46

hidori

総合スコア402

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

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

cacao86

2020/06/04 11:18

ご回答ありがとうございます。 MySQLは公式からrunで取得してきたものに自分でdbとtabeleを作成したものになります。 >Docker コンテナで実行される MySQL に、remote 接続を許可すればよいのではないでしょうか。 調べたのですがremote接続の許可の仕方が分からず接続まで至りませんでした。 詳しいやり方や参考サイトなどあれば教えていただけませんか?
hidori

2020/06/04 12:10

>調べたのですがremote接続の許可の仕方が分からず接続まで至りませんでした。 `grant select,insert,update,delete on test_db.* to user_name@"%" identified by '<PASSWORD>';` とかですね。(すでに試してみるみたいですが。。) ちなみに、エラーになるのは接続時ですか? それとも table などの操作を行う時ですか? >Docker内からmysql -u user_name -h 127.0.0.1 -pではログインに成功します。 とのことですし、エラーも MySQL とネットワーク的な疎通ができた後の話なので、権限設定だけの問題だと思うんですが。。 ちなみに、mac のシェル(=Docker コンテナの外)から mysql コマンドで * root での接続 * user_name での接続 は両方とも失敗しますか?
cacao86

2020/06/04 12:23

エラーになるのは接続時です。細かく述べますと、Eclipseのプラグインのjdbcを使ってdocker内にあるdbに接続しようとするときにエラーになります。 * root での接続→成功 * user_name での接続→失敗 です。 ちなみに素人質問で申し訳ないのですが、 docker-compose.ymlとdockerfileを書かずdocker-compose up -dをしない場合は接続はできないということはありますか?
退会済みユーザー

退会済みユーザー

2020/06/04 12:29

公式Repositoryのを正常に起動したなら | root | % | みたいに どこからでもOKになるけどね
hidori

2020/06/04 12:33

>Eclipseのプラグインのjdbcを使ってdocker内にあるdbに接続しようとするときにエラーになります。 mac の zsh/bash から mysql コマンドではどうでしょう? >* root での接続→成功 >* user_name での接続→失敗 やはり user_name ユーザの権限設定の問題に見えますね。 >docker-compose.ymlとdockerfileを書かずdocker-compose up -dをしない場合は接続はできないということはありますか? 無いです。 ちょっと試してみるだけの時など ``` docker run -d --name mysql \ -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=P@ssw0rd \ mysql:5.7 ``` で、普通に読み書き出来てます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問