您好我正在尝试直接在我的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
由于
答案 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>
也许这不是最干净的方式,但它确实有效!