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

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

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

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

MySQL

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

Docker

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

Q&A

解決済

1回答

1870閲覧

Dockerに作成したMySQLコンテナへホストから接続する方法

ambN

総合スコア13

docker-compose

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

MySQL

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

Docker

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

1グッド

1クリップ

投稿2018/10/01 06:30

編集2018/10/02 02:24

前提・実現したいこと

Dockerの勉強を行っており、MySQLとPHP+Apacheの各コンテナを作成しました。
PHP+ApacheコンテナからMySQLコンテナへの接続は問題なく行えたのですが、
ホスト側からコマンドプロンプト、A5M2などを使用してMySQLコンテナへ接続しようとしてもエラーが出て接続することができません。

ホスト側にもMySQL最新版を入れております。

ホスト側からMySQLコンテナへ接続できる方法をご教示ください。
よろしくお願いいたします。

<追記>
t_obaraさんよりいただいたURLの結果を追加しました。

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

下記、コマンドプロンプトから接続を試したときのコマンドとエラーメッセージです。

>mysql -h 127.0.0.1 --port 3309 -u root -p Enter password: ******** ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (10061)

該当のソースコード

docker-compose.yml

version: '3' services: db: container_name: bbs_mysql build: ./db ports: - "3309:3306" environment: MYSQL_DATABASE: db_bbs MYSQL_ROOT_PASSWORD: rootpass command: "--innodb_use_native_aio=0" volumes: - ./db/db_data:/var/lib/mysql - ./db/sqls:/docker-entrypoint-initdb.d web: container_name: bbs_php_apache build: ./web ports: - "8099:80" volumes: - ./app:/var/www/appBbs - ./web/000-default.conf:/etc/apache2/sites-available/000-default.conf - ./logs:/var/log/apache2 depends_on: - db

Dockerfile

FROM mysql:8.0 COPY ./my.cnf /etc/mysql/conf.d/

my.cnf

[mysqld] character-set-server=utf8mb4 default_authentication_plugin = mysql_native_password [client] default-character-set=utf8mb4

作成したコンテナ

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cae0960fceba bbs_web "docker-php-entrypoi…" 7 seconds ago Up 3 seconds 0.0.0.0:8099->80/tcp bbs_php_apache f2e1877a8d62 bbs_db "docker-entrypoint.s…" 11 seconds ago Up 8 seconds 33060/tcp, 0.0.0.0:3309->3306/tcp bbs_mysql

<追記>
1. 外部サーバーへpingコマンドを叩く

>ping 127.0.0.1 127.0.0.1 に ping を送信しています 32 バイトのデータ: 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 からの応答: バイト数 =32 時間 <1ms TTL=128 127.0.0.1 の ping 統計: パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 0ms、最大 = 0ms、平均 = 0ms

⇒返答あり

2. 外部サーバーに直接ログインし、サーバー上でMySQLにアクセス

mysql> show variables like 'port'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | port | 3306 | +---------------+-------+ 1 row in set (0.01 sec) mysql> select host, user from mysql.user; +-----------+------------------+ | host | user | +-----------+------------------+ | % | root | | % | user | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 6 rows in set (0.00 sec)

⇒portが3306なのは、コンテナ内なので問題なしのはず。。
ユーザーも、root@%がいるためアクセス可能のはず。。

3. /etc/mysql/my.cnfの確認

root@f2e1877a8d62:/etc/mysql# cat my.cnf # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The MySQL Server configuration file. # # For explanations see # http://dev.mysql.com/doc/mysql/en/server-system-variables.html [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= NULL # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Custom config should go here !includedir /etc/mysql/conf.d/

⇒bind-addressの記載なし。自分で作成したmy.cnfにも記載していない状態。

gnx_vw903👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

MySQLに外部接続できない時のチェックポイント
こちらをご確認されてはいかがでしょう。

特に、bind-addressやホストとアカウントの関係が引っかかりがちかと。

投稿2018/10/01 09:32

t_obara

総合スコア5488

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

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

ambN

2018/10/02 02:17

ご回答ありがとうございます。 添付のURLの内容を1から試してみたところ、bind-addressの記述がない旨を確認できました。 ただ、rootがどこからでも接続できる%を付けているため、 bind-addressで自分のIPを指定せずに接続できるのではないかと考えております。 URLの内容を確認した結果を質問にて追記いたしましたので、ご確認いただけますと幸いです。 よろしくお願いいたします。
t_obara

2018/10/02 07:49

ssh xxx@127.0.0.1 -p 3309 を実行するとどのようなエラーが表示されるか教えていただけますか
ambN

2018/10/02 08:12

ssh: connect to host 127.0.0.1 port 3309: Connection refused と表示されます。
t_obara

2018/10/02 08:46

実行しているホストでdockerを動作させているのでしょうか? ご提示しているdocker psの結果がmysqlコマンドを実行しているホストと同じであれば、firewallぐらいしか思いつきません。 ちなみに、mysqlサーバが正常に待ち受けしている場合には、以下のメッセージになります。 Connection closed by remote host mysqlサーバ側から接続を切った状態です。ご提示のメッセージの場合、ホスト名かポートが不正の場合、接続拒否で適当なホスト名やポートに変更しても同じメッセージになります。 繰り返しになりますが、dockerを動かしているサーバと、mysqlコマンドで接続しようとしているサーバは同じホストですか?
ambN

2018/10/03 07:35

>dockerを動かしているサーバと、mysqlコマンドで接続しようとしているサーバは同じホストですか? はい。Windows10の中にDockerToolboxを入れており、すべてこのPCからコンテナの作成やmysqlへの接続試行を行っております。 firewallにポート3309の受信許可を追加して試してみたり、一度Nortonからfirewallを止めたりもしたのですが、 ssh: connect to host 127.0.0.1 port 3309: Connection refused と変わらず表示されている状態です。 firewallのあたりをもう少し調べて試してみようと思います。
ambN

2019/07/17 05:35

現在、同じようにmysqlに接続してみたところ接続に成功できるようになっておりました。 PCの設定などは特に変更しておらず、唯一変えたのはDocker toolboxからDocker for Windowsにしたことです。 かなりの日が経ってしまいましたが、色々調べていただきましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問