web-dev-qa-db-ja.com

DockerへのMySQLのインストールが失敗し、「ソケットを介してローカルMySQLサーバーに接続できません」というエラーメッセージが表示される

Dockerコンテナ内にmysqlをインストールしようとしていますが、githubからさまざまなイメージを試しましたが、すべて正常にmysqlをインストールできたようですが、mysqlを実行しようとするとエラーが発生します:

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

システム仕様:

  • Ubuntu 12,04はAWS上
  • Docker 0.10.0

これまで試したパッケージ:

32
Mohammad

実行中のdockerコンテナーに接続する必要があることに注意してください。したがって、おそらくUNIXソケットの代わりにtcpを使用する必要があります。 docker psコマンドの出力を確認し、実行中のmysqlコンテナーを探します。見つかった場合は、次のようなmysqlコマンドを使用します。mysql -h 127.0.0.1 -P <mysql_port>docker ps出力にポートがあります)。 docker ps出力で実行中のmysqlコンテナが見つからない場合は、docker imagesを試してmysqlイメージ名を見つけ、次のようなものを試して実行してください:docker run -d -p 3306:3306 tutum/mysql where "tutum/mysql" docker imagesに画像名が見つかりました。

51
odk

私は同じ問題を抱えていました。実際、インストール後にサービスを実行するのを忘れていました。

Mysqlサーバーを起動します。

/etc/init.d/mysql start
15
Mega

どのようにこれを達成するのかわかりませんが、入力してMYSQLに到達することができます

$ mysql -u root -h

mywebsite:
  image: benftwc/pldev-webserver
  volumes:
    - ./mywebsite.fr/:/var/www/
  working_dir: /var/www/
  ports:
    - "8009:8009"
  command: php -S 0.0.0.0:8009
  links:
    - database
database:
  image: library/mysql
  environment:
    MYSQL_ROOT_PASSWORD: root
  ports:
    - "3310:3306

root@422f4d1f454a:/# mysql -u root -h 127.0.0.1 -p3310
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

root@422f4d1f454a:/# mysql -u root -h database -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g...........
12
Ben Cassinat

ホストにMySQLがインストールされていない場合は、コンテナで実行する必要がありますhttps://docs.docker .com/engine/reference/commandline/exec /#/ examplesdocker runvsdocker exec)に関する説明。

コンテナが実行されていることを考慮すると、docker exec yourcontainername mysql -u root -pクライアントへのアクセス。

また、Docker Composeを使用していて、databaseという名前のmysql dbサービスを宣言している場合は、_docker-compose exec database mysql -u root -p

4
Jeremy Jumeau

私は答えに少し遅れているかもしれません、そしておそらく世界はこれについて今知っています。

Dockerコンテナーのポートを開いてアクセスする必要があります。たとえば、コンテナの実行中:

docker run --name mysql_container -e MYSQL_ROOT_PASSWORD = root -d -p 3306:3306 mysql/mysql-server:5.7

これにより、ホストマシンからコンテナのmysqlにアクセスできるようになります。後で接続できます。

docker exec -it mysql_container mysql -u root -p

3
Dave Ranjan

この質問の数か月後、Dockerスキルをレベルアップしました。代わりにDockerコンテナー名を使用する必要があります。

Dokerized-nginxをブリッジとして使用して、コンテナのip + portを公開します。

WEB構成内で、mysql://USERNAME:PASSWORD@docker_container_name/DB_NAME dockerを介してMysqlソケットにアクセスする(docker-composeでも動作します。コンテナの代わりにcompose-nameを使用します)

2
Ben Cassinat

database.ymlファイルの内容を確認してください。既にRailsアプリがあり、単にDockerでラップしている場合は、変更する必要があります(database.yml内):

socket: /var/run/mysqld/mysqld.sock #just comment it out

Host: db 

ここで、dbは、docker-compose.ymlからのdb-serviceの名前です。そしてここに私のdocker-compose.ymlがあります:

version: '3'
services:
  web:
    build: .
    command: bundle exec Rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    links:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root

コンソールで(アプリフォルダー内の)アプリをdocker-compose upとして起動します。次に、いくつかの新しいログがコンソールに表示されなくなるまで、WAIT 1 MINUTE(mysqlサービスに完全にロードさせます)。通常、最後の行は次のようになります

db_1 | 2017-12-24T12:25:20.397174Z 0 [ノート]非ネイティブパーティションテーブルのリストの終わり

次に、(新しいターミナルウィンドウで)適用します。

docker-compose run web rake db:create

その後

docker-compose run web rake db:migrate

作業が終了したら、ロードされた画像を停止します

docker-compose stop

代わりにdocker-compose downを使用しないでください。使用すると、データベースの内容が消去されるためです。

次回仕事を再開したいときは、次を適用します。

docker-compose start

残りのことは、ここで説明したとおりに行われます。 https://docs.docker.com/compose/Rails/

2
prograils

今日同じ問題に遭遇しました。このコマンドでurコンテナを実行してみてください。

docker run --name mariadbtest -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypass -d mariadb/server:10.3
1
USMAN FAZIL

私にとっては、単にdockerデーモンを再起動するだけでした。

0
ZiGiUs