web-dev-qa-db-ja.com

Dockerコンテナーのmysqlパスワードを変更する

Mysqlサービスを停止するとコンテナは自動的に停止するため、Dockerコンテナのルートパスワードを変更するにはどうすればよいですか。

Mysqlコンテナを停止して、新しいコンテナをデプロイする必要がありますか?

12
胡亦朗

docker execセッション を使用して、実行中のコンテナから変更できます。詳細については、「 コンテナ内からMySQL Serverへの接続

サーバーの準備ができたら、開始したばかりのMySQLサーバーコンテナー内でmysqlクライアントを実行し、MySQLサーバーに接続できます。
docker exec -itコマンドを使用して、開始したDockerコンテナー内でmysqlクライアントを開始します。以下に例を示します。

docker exec -it mysql1 mysql -uroot -p

求められたら、生成されたrootパスワードを入力します(検索方法については上記の手順を参照してください)。 MYSQL_ONETIME_PASSWORDオプションはデフォルトでtrueであるため、上記のサンプルコマンドでサーバーコンテナーを起動し、mysqlクライアントをサーバーに接続した後、MySQL 5.7以降でこのステートメントを発行してサーバールートパスワードをリセットする必要があります。

mysql> update user set authentication_string=password('new_password') where user='root';

または、代わりに実行し、

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');

MySQL 5.7より古いバージョンの場合は、次を実行します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

newpasswordを選択したパスワードに置き換えます。パスワードがリセットされると、サーバーを使用する準備が整います。

次に、「 hub.docker.com/mysql 」で説明されているように、忘れないでください docker secrets

環境変数を介して機密情報を渡す代わりに、_FILEを前述の環境変数に追加して、初期化スクリプトにコンテナ内のファイルからこれらの変数の値をロードさせることができます。
特に、これは/run/secrets/<secret_name>ファイルに保存されたDockerシークレットからパスワードをロードするために使用できます。
例えば:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag
13
VonC