Php 如何使用bash脚本自动将密码短语输入docker容器?
我需要知道如何在docker容器中为私钥自动输入密码短语 我在使用docker设置web应用程序容器时遇到问题。在安装过程中,我必须在容器中运行Php 如何使用bash脚本自动将密码短语输入docker容器?,php,bash,docker,ssh,passphrase,Php,Bash,Docker,Ssh,Passphrase,我需要知道如何在docker容器中为私钥自动输入密码短语 我在使用docker设置web应用程序容器时遇到问题。在安装过程中,我必须在容器中运行composer install,并且存在一个需要克隆私有git存储库的依赖项。在这种情况下,它需要使用我的私钥,并且密钥由密码短语保护。因此,在运行composer install时,需要提供密码短语来克隆存储库。当我在容器中手动运行这些命令时,该流没有问题 但我计划用bash脚本自动化整个过程,当我在主机内运行bash脚本时,它不会要求密码短语并以“
composer install
,并且存在一个需要克隆私有git存储库的依赖项。在这种情况下,它需要使用我的私钥,并且密钥由密码短语保护。因此,在运行composer install
时,需要提供密码短语来克隆存储库。当我在容器中手动运行这些命令时,该流没有问题
但我计划用bash脚本自动化整个过程,当我在主机内运行bash脚本时,它不会要求密码短语并以“Permission denied(publickey)”错误退出
如何在不退出脚本的情况下使用bash脚本自动化整个过程?我正在搜索一种类似的方法,即在克隆私有存储库或任何其他工作解决方案时提示输入密码短语。您可以使用机密来管理容器在运行时需要的任何敏感数据,但您不希望将其存储在映像或源代码管理中 注意:Docker机密仅适用于swarm服务,不适用于独立容器。若要使用此特性,请考虑将容器作为服务运行。有状态容器通常可以以1的比例运行,而无需更改容器代码
选中您可以使用机密来管理容器在运行时需要的任何敏感数据,但您不希望将其存储在映像或源代码管理中 注意:Docker机密仅适用于swarm服务,不适用于独立容器。若要使用此特性,请考虑将容器作为服务运行。有状态容器通常可以以1的比例运行,而无需更改容器代码 勾选通常答案是“不要”。在构建期间输入的密码将是图像的一部分,通常在层历史记录中。如果您不介意在映像中包含密码,那么它取决于正在运行的命令。有时您可以
echo p4ssw0rd | git clone…
,但有时该命令会故意删除管道输入并强制提示安全性。其他命令具有选项,可在命令提示符上包含带有标志的密码。有些人会使用一个“expect”脚本来处理这样的提示,该脚本监视输出并在提示时发送密码。每一个都会将密码放入图像中
对于您的特定场景,一个选项是添加一个不需要git密码的密钥对。另一种选择是在docker构建之外签出代码,并将repo复制到映像中,而不是让git签出
如果您确实需要在映像中包含密码,那么请查看多阶段构建。在第一阶段输入密码,然后将结果复制到第二阶段,这样您推送的图像不会在图像层中包含密码。通常答案是“不要”。在构建期间输入的密码将是图像的一部分,通常在层历史记录中。如果您不介意在映像中包含密码,那么它取决于正在运行的命令。有时您可以echo p4ssw0rd | git clone…
,但有时该命令会故意删除管道输入并强制提示安全性。其他命令具有选项,可在命令提示符上包含带有标志的密码。有些人会使用一个“expect”脚本来处理这样的提示,该脚本监视输出并在提示时发送密码。每一个都会将密码放入图像中
对于您的特定场景,一个选项是添加一个不需要git密码的密钥对。另一种选择是在docker构建之外签出代码,并将repo复制到映像中,而不是让git签出
如果您确实需要在映像中包含密码,那么请查看多阶段构建。在第一阶段输入密码,然后将结果复制到第二阶段,这样您推送的图像就不会在图像层中包含密码。我找到了问题的答案,它非常简单,只需在调用
composer install
的bash脚本中将-it
标志设置为docker exec
命令。我故意跳过了这个标志,因为它在bash脚本中运行,我没有注意到需要一个交互模式来提示输入密码短语
无论如何,在像下面这样修改bash脚本之后,问题就解决了
docker exec -it {container_name} composer install
在看了以上的答案后,我觉得我还没有给出关于这个问题的完整情况。所以我想,我需要在这里补充一些解释。bash脚本的结构如下所示
使用docker compose启动容器
在本例中,我的应用程序代码作为docker卷放置在web app容器之外,以便轻松管理
使用上面的docker exec
命令将PHP依赖项安装到web应用程序容器中
使用再次相关的docker exec
命令运行数据库迁移
所以,我的问题是安装composer软件包时的第二步。在composer安装期间,有一个包需要从私有git存储库克隆。对于要克隆的密钥,将使用我的私钥,因为它受密码短语的保护,并且缺少docker exec
命令交互模式所需的标志(-it
),所以bash脚本