Docker-compose.ymlファイルは次のようになります。
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: yes
ports:
- "3306:3306"
これは正常に機能します。
私の質問は次のとおりです。ホスト(macbook)のコマンドラインmysqlクライアントからそのコンテナで実行されているMySQLインスタンスに接続するにはどうすればよいですか?
明確にするために:
docker
コマンドを使用したくありません。むしろ、ターミナルからmysql
クライアントを直接使用します(Dockerコンテナーをトンネリングせずに)。MySQLをローカルで実行していないため、ポート3306を開いて使用する準備ができているはずです。
コンテナを起動するために使用しているコマンドは次のとおりです:docker-compose run
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)
わかった!!答えは、--service-ports
の実行時にdocker-compose
オプションを使用することです。
docker-compose run --service-ports db
(元のdocker-compose.ymlファイルは正常に機能します)
助けてくれてありがとう!
これは私のために働いた。
/usr/local/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
Ymlファイルは見栄えがいいです。
既にローカルポート3306にマップされているため、Dockerコンテナを直接直接接続できます。ターミナルに移動して実行するだけです
mysql -h 127.0.0.1 -u root -p
注:mysqlコマンドラインにアクセスできる必要があります。 mysqlコマンドでエラーが表示される場合は、mysqlサーバーに接続できない場合は「/ usr/local/mysql/bin」を確認してください。言い換えると、マシンにmysqlクライアントが必要です。
Dockerイメージ内でMySQLにログインする簡単な方法は次のとおりです。
Sudo docker exec -it <IMAGE_ID> mysql -u root -p
root
のデフォルトパスワードは設定されていません。空白です。ルートパスワードを変更していない限り、単にEnter/Returnキーを押してください。
正常に実行されると、上記のコマンドはmysqlプロンプトを表示します。
乾杯!
3306として内部ポートをホストに公開しているため、{Host ip}:3306を介してMySQLに接続します。MySQLCLIツールにアクセスする必要がある場合は、docker exec -it mycontainer bash
に移動する必要があります。ホストo/sにローカルにインストールされていない場合、MySQLと共にインストールされたツールにアクセスします。
Docker MySQLホストが正しく実行されている場合、ローカルマシンから接続できますが、ホスト、ポート、およびプロトコルを次のように指定する必要があります。
mysql -h localhost -P 3306 --protocol=tcp -u root
Dockerコンテナ内でMySQLを実行しているため、ソケットは使用できず、TCP経由で接続する必要があります。 mysqlコマンドで「--protocol」を設定すると、それが変更されます。