Dockerコンテナ内にmysqlをインストールしようとしていますが、githubからさまざまなイメージを試しましたが、すべて正常にmysqlをインストールできたようですが、mysqlを実行しようとするとエラーが発生します:
エラー2002(HY000):ソケット '/var/run/mysqld/mysqld.sock'を介してローカルMySQLサーバーに接続できません
システム仕様:
これまで試したパッケージ:
実行中の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
に画像名が見つかりました。
私は同じ問題を抱えていました。実際、インストール後にサービスを実行するのを忘れていました。
Mysqlサーバーを起動します。
/etc/init.d/mysql start
どのようにこれを達成するのかわかりませんが、入力して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...........
ホストに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
私は答えに少し遅れているかもしれません、そしておそらく世界はこれについて今知っています。
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
この質問の数か月後、Dockerスキルをレベルアップしました。代わりにDockerコンテナー名を使用する必要があります。
Dokerized-nginxをブリッジとして使用して、コンテナのip + portを公開します。
WEB構成内で、mysql://USERNAME:PASSWORD@docker_container_name/DB_NAME
dockerを介してMysqlソケットにアクセスする(docker-composeでも動作します。コンテナの代わりにcompose-nameを使用します)
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/
今日同じ問題に遭遇しました。このコマンドでurコンテナを実行してみてください。
docker run --name mariadbtest -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypass -d mariadb/server:10.3
私にとっては、単にdockerデーモンを再起動するだけでした。