Dockerプロファイルの変更を記録するとコンテナが起動しなくなります
2736 ワード
問題の説明
MySQL5.7デフォルトでonly_を有効にするfull_group_byオプションで、プロファイル(/etc/mysql/mysql.conf.d/mysqld.cnf)に追加しました
dockerコンテナの構成情報を変更しましたが、プロファイルが間違っていたり、プロファイルのフォーマットが間違っていたりして、コンテナが再起動できません.
方法1
dockerコンテナのいくつかの構成情報は一般的にvar/lib/docker/overlayの下にあります.このディレクトリには対応する構成が見つかり、変更後に再起動できます.
1.クエリー・ログ
エラーから分かるように、私はプロファイルにエラーのパラメータSET sqlを設定しました.mode=...このパラメータはmysqlコンテナプロファイルmysqldに設定します.cnfにあるので、プロファイルを見つけてSET sql_mode=... 削除
2.ファイルの検索
メモ:複数のmysqlコンテナを起動すると複数のmysqldが表示されるなど、複数のプロファイルが見つかります.cnf、あなたの現在のエラーに対応するmysqldを見つけます.cnfを変更して再起動します.
3.プロファイルの変更、再起動
方法2
dockerコンテナのプロファイルをホストにコピーし、ホストで変更し、変更が完了したらdockerコンテナにコピーします.
1.dockerコンテナのファイルをホストにコピーする
2.プロファイルでエラーが発生した部分の変更
3.構成ファイルをdockerコンテナに
4.容器の再起動
まとめ
どちらの方法も、コンテナが起動できない場合に、コンテナ内のプロファイルを変更することを解決します.個人的には2つ目の方法をお勧めします.主にどのプロファイルがホストにコピーできるかを知っていて、自由に変更します.
参照先: only_についてfull_group_by問題はこの を参照してください. Docker起動できないコンテナのプロファイル を変更
MySQL5.7デフォルトでonly_を有効にするfull_group_byオプションで、プロファイル(/etc/mysql/mysql.conf.d/mysqld.cnf)に追加しました
SET sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
dockerコンテナの構成情報を変更しましたが、プロファイルが間違っていたり、プロファイルのフォーマットが間違っていたりして、コンテナが再起動できません.
方法1
dockerコンテナのいくつかの構成情報は一般的にvar/lib/docker/overlayの下にあります.このディレクトリには対応する構成が見つかり、変更後に再起動できます.
1.クエリー・ログ
docker logs / id
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
2019-08-20T12:20:57.919628Z 0 [ERROR] unknown variable 'SET sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
2019-08-20T12:20:57.923248Z 0 [ERROR] Aborting
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
2019-08-20T12:21:58.445399Z 0 [ERROR] unknown variable 'SET sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
2019-08-20T12:21:58.448990Z 0 [ERROR] Aborting
エラーから分かるように、私はプロファイルにエラーのパラメータSET sqlを設定しました.mode=...このパラメータはmysqlコンテナプロファイルmysqldに設定します.cnfにあるので、プロファイルを見つけてSET sql_mode=... 削除
2.ファイルの検索
mandy@ubuntu:~$ sudo find / -name mysqld.cnf
/tmp/mysqld.cnf
/var/lib/docker/overlay2/967bef783b7ae60e477382ac25f015793f8e3047f7bbca203759ed1ab1b2a661/diff/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/ddef71f08d9dc90ceb354850a89e59817c5e730b8fdea07f0916eb95e2637dce/diff/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/ddef71f08d9dc90ceb354850a89e59817c5e730b8fdea07f0916eb95e2637dce/merged/etc/mysql/mysql.conf.d/mysqld.cnf
メモ:複数のmysqlコンテナを起動すると複数のmysqldが表示されるなど、複数のプロファイルが見つかります.cnf、あなたの現在のエラーに対応するmysqldを見つけます.cnfを変更して再起動します.
3.プロファイルの変更、再起動
方法2
dockerコンテナのプロファイルをホストにコピーし、ホストで変更し、変更が完了したらdockerコンテナにコピーします.
1.dockerコンテナのファイルをホストにコピーする
docker cp id:docker
docker cp 2f9845c5e47810a984c5e2ae5a5e5c1e041a746079682e6b464089ca1b1c5fc2:/etc/mysql/mysql.conf.d/mysqld.cnf /tmp/mysqld.cnf
2.プロファイルでエラーが発生した部分の変更
3.構成ファイルをdockerコンテナに
docker cp id:docker
docker cp /tmp/mysqld.cnf 2f9845c5e47810a984c5e2ae5a5e5c1e041a746079682e6b464089ca1b1c5fc2:/etc/mysql/mysql.conf.d/mysqld.cnf
4.容器の再起動
まとめ
どちらの方法も、コンテナが起動できない場合に、コンテナ内のプロファイルを変更することを解決します.個人的には2つ目の方法をお勧めします.主にどのプロファイルがホストにコピーできるかを知っていて、自由に変更します.
参照先: