我在玩弄一些docker容器,我想知道如何从日志中获取创建容器时生成的密码。
所以我运行容器
$> docker container run --name mysql -p 3306:3306 -e MYSQL_RANDOM_ROOT_PASSWORD=yes -d mysql
此命令使用随机生成的密码启动一个新的 mysql 容器,我可以从日志中获取该密码。确切地说,此命令给出了以下传递:
$> docker container logs mysql
...
Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
GENERATED ROOT PASSWORD: Poow3eet2aat6aePhae6leipeecagife
2019-04-07T08:00:18.945238Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.15) MySQL Community Server - GPL.
这只是一个背景。当然,重要的部分是与GENERATED ROOT PASSWORD
行,您可以假设我实际上是从任何其他来源获得此文本文件。我想用类似的东西将其存储在某个变量中
export ROOT_PASS=$(expression)
为此,我需要提出仅返回随机生成的字符串的表达式。当然,或者我可以只将正则表达式模式的匹配子字符串分配给变量。
我想到了
docker container logs mysql | grep -e "PASSWORD: .*"
但这结果是整条线,实际上PASSWORD: Poow3eet2aat6aePhae6leipeecagife
突出。我还想到了sed的一些东西:
docker container logs mysql | sed -e 's/PASSWORD: .*/$1/g'
。但这剥离了有趣的部分,实际上返回了其他所有内容。
有什么建议吗?
追加 GNU grep:
| grep -Po 'GENERATED ROOT PASSWORD: K.*'
或 GNU sed:
| sed -n 's/^GENERATED ROOT PASSWORD: //p'
输出:
Poow3eet2aat6aePhae6leipeecagife
参见:这个正则表达式中的"\K"是什么意思?