web-dev-qa-db-ja.com

ローカルホストからDocker MySQLコンテナーに接続しますか?

Docker-compose.ymlファイルは次のようになります。

db:
  image: mysql
  environment:
    MYSQL_ROOT_PASSWORD: ""
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
  ports:
    - "3306:3306"

これは正常に機能します。

私の質問は次のとおりです。ホスト(macbook)のコマンドラインmysqlクライアントからそのコンテナで実行されているMySQLインスタンスに接続するにはどうすればよいですか?

明確にするために:

  • DockerがインストールされたMacbookがあります
  • Mysqlのdockerコンテナーがあります
  • 私のMacBookのターミナルから前述のコンテナで実行されているmysqlインスタンスに接続したい
  • これを可能にするためにdockerコマンドを使用したくありません。むしろ、ターミナルからmysqlクライアントを直接使用します(Dockerコンテナーをトンネリングせずに)。

MySQLをローカルで実行していないため、ポート3306を開いて使用する準備ができているはずです。

コンテナを起動するために使用しているコマンドは次のとおりです:docker-compose run

48
Caleb

docker-compose upを使用する

docker Hostでポート3306を公開したため、そのホスト自体から127.0.0.1:3306に接続します。

docker-compose runを使用する

その場合、docker-compose.ymlファイルのポートマッピングセクションは無視されます。ポートマッピングセクションを考慮するには、 --service-ports オプションを追加する必要があります。

docker-compose run --service-ports db

追記

デフォルトでは、localhostへの接続を指示すると、mysqlクライアントはUNIXソケットを使用して接続しようとすることに注意してください。したがって、localhostではなく、127.0.0.1を使用してください。

 $ mysql -h 127.0.0.1 -P 3306 -u root

MySQLモニターへようこそ。コマンドの末尾は;または\ g。 MySQL接続IDは1サーバーバージョンです:5.6.26 MySQL Community Server(GPL)

著作権(c)2000、2015、Oracleおよび/またはその関連会社。全著作権所有。

Oracleは、Oracle Corporationおよびその関連会社の登録商標です。その他の名前は、それぞれの所有者の商標である場合があります。

「help;」と入力しますまたは、ヘルプの場合は「\ h」。 「\ c」と入力して、現在の入力ステートメントをクリアします。

mysql>

$ mysql -h localhost -P 3306 -u root

エラー2002(HY000):ソケット '/var/run/mysqld/mysqld.sock'を介してローカルMySQLサーバーに接続できません(2)

64
Thomasleveil

わかった!!答えは、--service-portsの実行時にdocker-composeオプションを使用することです。

docker-compose run --service-ports db(元のdocker-compose.ymlファイルは正常に機能します)

助けてくれてありがとう!

10
Caleb

これは私のために働いた。

/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
1
Swannie

Ymlファイルは見栄えがいいです。

既にローカルポート3306にマップされているため、Dockerコンテナを直接直接接続できます。ターミナルに移動して実行するだけです

mysql -h 127.0.0.1 -u root -p

注:mysqlコマンドラインにアクセスできる必要があります。 mysqlコマンドでエラーが表示される場合は、mysqlサーバーに接続できない場合は「/ usr/local/mysql/bin」を確認してください。言い換えると、マシンにmysqlクライアントが必要です。

1
Virendra Jadeja

Dockerイメージ内でMySQLにログインする簡単な方法は次のとおりです。

Sudo docker exec -it <IMAGE_ID> mysql -u root -p

rootのデフォルトパスワードは設定されていません。空白です。ルートパスワードを変更していない限り、単にEnter/Returnキーを押してください。

正常に実行されると、上記のコマンドはmysqlプロンプトを表示します。

乾杯!

0
epsan

3306として内部ポートをホストに公開しているため、{Host ip}:3306を介してMySQLに接続します。MySQLCLIツールにアクセスする必要がある場合は、docker exec -it mycontainer bashに移動する必要があります。ホストo/sにローカルにインストールされていない場合、MySQLと共にインストールされたツールにアクセスします。

0
GHETTO.CHiLD

Docker MySQLホストが正しく実行されている場合、ローカルマシンから接続できますが、ホスト、ポート、およびプロトコルを次のように指定する必要があります。

mysql -h localhost -P 3306 --protocol=tcp -u root

Dockerコンテナ内でMySQLを実行しているため、ソケットは使用できず、TCP経由で接続する必要があります。 mysqlコマンドで「--protocol」を設定すると、それが変更されます。

0
maniekq