如何在PHP代码中利用Docker的秘密?

时间:2017-11-01 23:23:01

标签: php docker docker-swarm

有关在PHP脚本中使用docker机密的最佳做法是什么?

使用案例:我有一个Docker堆栈,它由(1)基于图像的 web 服务组成,该图像将php与apache服务器耦合,以及(2) db 基于最新mysql映像的服务。

web 服务的/ var / www / html中,我有一个config.php,它定义了许多表示数据库连接参数(用户名,密码等)的变量。此config.php文件包含在整个代码库中建立数据库连接的任何位置。我有对应于我想在config.php中定义的每个参数定义的docker机密 - 在config.php的定义中使用这些机密的最佳方法是什么?

默认情况下,每个泊坞窗密钥都会挂载到文件/run/secrets/<secret name>

我天真的解决方案只是使用fopen()和fgets(),如下所示:

function getSecret($secret){
    $secret_file = fopen("/run/secrets/{$secret}");
    $secret = fgets($secret_file);
    fclose($secret_file);
    return  $secret;                      
}

的config.php:

return [
    'database' => [
        'host' => getSecret('db_host'),
        'user' => getSecret('db_user'),
        'password' => getSecret('db_password),
        ...
    ]
];

这看起来是一种明智的做法吗?

1 个答案:

答案 0 :(得分:2)

我最终选择了file_get_contents("/run/secrets/...");

这是一个未记录的“功能”,默认情况下它会在文件末尾添加换行符(0x0a),因此需要进行修剪。

最终结果是:

$dbpasswd = rtrim(file_get_contents("/run/secrets/mysql_password"));

优点是您无需处理打开和关闭文件 修剪的需要虽然令人烦恼。

http://php.net/manual/en/function.file-get-contents.php

相关问题