带有docker的mysql_config_editor

时间:2016-09-14 16:05:10

标签: mysql bash docker dockerfile

您好我正在尝试直接在我的Dockerfile中使用mysql_config_editor工具:

FROM mysql
RUN mysql_config_editor set --login-path=local --user=root --password

但是此命令要求用户输入密码。有没有办法直接从Dockerfile设置密码,因为它知道无法直接在命令行中设置密码。

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

由于

1 个答案:

答案 0 :(得分:0)

您可以使用expect执行此操作:

这是您的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

这是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}

现在您可以直接连接到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>

也许这不是最干净的方式,但它确实有效!