web-dev-qa-db-ja.com

DockerコンテナでMySQLを実行する

したがって、私の最終的な目標は、MySQL Dockerコンテナー(パブリックレジストリのtutum/mysqlなど)を実行してから、Gitlab Dockerコンテナー(sameersbn/gitlabなど)を、両方のコンテナーが永続ストレージを使用するコンテナーにリンクすることです。

しかし、MySQLの部分に行き詰まっています。以下に概説されているように、事前に作成されたMySQL Dockerコンテナ(mysql、tutum/mysqlおよびsameersbn/mysql)を実行しようとするたびに、以下の出力が得られます。

手順

これは、以下のエラーメッセージを取得する1つの方法にすぎません。

  1. docker.ioプルtutum/mysql:latest
  2. docker.io run -it tutum/mysql bash
  3. 新しいコンテナーに接続したら、「/ run.sh」を実行します(tutum/mysql dockerfileのとおり)
  4. この時点で、「MySQLサービスの起動の確認を待っています」というメッセージが常に繰り返されます。
  5. この時点で「/run.sh」コマンドをキャンセルして自分でMySQLを起動すると、以下のエラーメッセージが表示されます。

出力:

root @ 1bbeb34f3491:/#mysqld

140730 4:49:04 [警告] key_buffer_sizeの代わりに一意のオプションプレフィックスkey_bufferを使用することは非推奨であり、将来のリリースで削除される予定です。代わりにフルネームを使用してください。

140730 4:49:04 [警告] myisam-recover-optionsの代わりに一意のオプションプレフィックスmyisam-recoverを使用することは非推奨であり、将来のリリースで削除される予定です。代わりにフルネームを使用してください。

140730 4:49:04 [注]プラグイン「FEDERATED」は無効になっています。

mysqld:テーブル 'mysql.plugin'は存在しません

140730 4:49:04 [エラー] mysql.pluginテーブルを開けません。 mysql_upgradeを実行して作成してください。

140730 4:49:04 InnoDB:InnoDBメモリヒープが無効になっています

140730 4:49:04 InnoDB:ミューテックスとrw_locksはGCCアトミックビルトインを使用します

140730 4:49:04 InnoDB:圧縮テーブルはzlib 1.2.8を使用します

140730 4:49:04 InnoDB:LinuxネイティブAIOの使用

140730 4:49:04 InnoDB:バッファプールの初期化、サイズ= 128.0M

140730 4:49:04 InnoDB:バッファプールの初期化が完了しました

140730 4:49:04 InnoDB:サポートされている最も高いファイル形式はバラクーダです。

140730 4:49:04 InnoDB:バックグラウンドスレッドの開始を待機しています

140730 4:49:05 InnoDB:5.5.37が開始されました。ログシーケンス番号1595675

140730 4:49:05 [注]サーバーのホスト名(バインドアドレス): '0.0.0.0';ポート:3306

140730 4:49:05 [注]-「0.0.0.0」は「0.0.0.0」に解決されます。

140730 4:49:05 [注]サーバーソケットはIP: '0.0.0.0'で作成されました。

140730 4:49:05 [エラー]サーバーを起動できません:UNIXソケットにバインド:権限が拒否されました

140730 4:49:05 [エラー]ソケット/var/run/mysqld/mysqld.sockで別のmysqldサーバーが実行されていますか?

140730 4:49:05 [エラー]中止

140730 4:49:05 InnoDB:シャットダウンを開始しています... 140730 4:49:06 InnoDB:シャットダウンが完了しました。ログシーケンス番号1595675 140730 4:49:06 [注] mysqld:シャットダウンが完了しました

エラーへの対処

  • 「mysql_upgradeを実行して作成してください」=>出力するmysql_upgradeコマンドを実行します

root @ 1bbeb34f3491:/#mysql_upgrade

次のように「mysql」を探します:mysql

「mysqlcheck」を次のように探します:mysqlcheck

致命的なエラー:アップグレードに失敗しました

  • 「ソケットで別のmysqldサーバーがすでに実行されていますか」=>いいえ。サービスmysql stopを実行しても何も実行されず、psを実行してもmysqldは表示されません。 ls -a/var/run/mysqld /を実行すると、ソケットファイルが存在しないことが示唆されます。

どのMySQLコンテナを試しても、最終的にMySQLを起動すると、同じエラーメッセージが表示されました。これはほぼ間違いなく、設定に問題があり、混乱しているため、公開されたポートや永続ストレージのないDockerコンテナーが、Dockerがインストールされているシステムから分離されると思っていたためです。

また、-dフラグを指定してMySQLコンテナーを実行してから、それにリンクされた新しいubuntu 14.04コンテナー(docker.io run -it --link mysql:mysql ubuntu:14.04 bash)を実行してみました。 Ubuntuコンテナーにapt-getを使用してmysql-clientをインストールし、MySQLコンテナーに接続しようとしましたが、それも機能しません。

私のホストシステムはUbuntu 14.04を実行しており、Dockerはapt-getによってインストールされ、バージョンは0.9.1です。

問題は私にはかなり奇妙に思われるので、私はこの説明に何を入れればよいのかよくわかりませんでした。見逃してしまったことがありましたら、お問い合わせください。追加します。

ありがとう、JamesStewy

[〜#〜] edit [〜#〜]誰かが1つのMySQLコンテナと1つのリンクされたコンテナを作成し、それらのために機能する一連の命令を作成して、私が試してみることができるとしたら。

6
JamesStewy

Sameersbn/mysqlを使用

インタラクティブに実行できるとは思いません。

docker run --name mysql -d sameersbn/mysql:latest

したがって、単にデーモンとして実行し、コンテナを調べて次のようにIPアドレスを見つけます。

docker inspect mysql | grep IPAddres

その後、そのIPでmysqlに接続できます。

2
outrunthewolf

同じ問題が発生しました-mysqlが起動するまで待つ必要があります(または少なくともリスナーを起動する必要があります)。そうでなければ、あなたはあなたが得た2013年の問題を取得します。スリープ60を追加しました。これはかなり洗練されていないハックですが、機能しているようです。より良い回避策を聞きたいです。

0
mistertee