Reputation: 69
Hi I'm trying to use mysql_config_editor tools directly in my Dockerfile:
FROM mysql
RUN mysql_config_editor set --login-path=local --user=root --password
But this command ask the user to enter the password. Is there a way to set the password directly from the Dockerfile knowing that it is not possible to set the password directly in the command line.
root@d80484a3177f:~# mysql_config_editor set --login-path=local --user=root --password
Enter password:
root@d80484a3177f:~# mysql_config_editor set --login-path=local --user=root --password=root
mysql_config_editor: [ERROR] mysql_config_editor: option '--password' cannot take an argument
Thanks
Upvotes: 1
Views: 2032
Reputation: 339
You can use expect
to do this :
This is your Dockerfile :
FROM mysql:5.7
RUN apt-get update && apt-get --no-install-recommends --no-install-suggests -y install expect
ENV MYSQL_ROOT_PASSWORD "secure_root_password"
ADD mysql_config.sh /root/mysql_config.sh
RUN cd /root && ./mysql_config.sh $MYSQL_ROOT_PASSWORD
And this is mysql_config.sh :
#!/usr/bin/expect
set pwd [lindex $argv 0];
spawn mysql_config_editor set --login-path=local --host=localhost --user=root --password
expect -nocase "Enter password:" {send "${pwd}\r"; interact}
Now you can connect directly to MySQL :
$ docker exec -it your-mysql-container mysql --login-path=local
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.18 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Maybe it's not the cleanest way, but it works !
Upvotes: 0