如何解决主管,Docker和Swarm机密无法访问
我正在努力使工作主管成为docker,symfony,学说和群体秘密的人。
在我的Dockerfile中,我正在这样做:
FROM php:${PHP_VERSION}-fpm-alpine
CMD ["/usr/bin/supervisord","-c","/etc/supervisor/conf.d/supervisor.conf"]
所以我启动了Supervisor,它看起来像这样:
我的主程序:
[program:php]
command=docker-entrypoint.sh "php-fpm"
autostart=true
autorestart=true
,它以入口点开始PHP。在此切入点中,我仅在prod中使用群体秘密:
if [ "$APP_ENV" = 'prod' ]; then
file_env DATABASE_URL
file_env MESSENGER_TRANSPORT_DSN
fi
php bin/console doctrine:migrations:migrate --no-interaction --allow-no-migration
在入口点内,命令bin / console运行正常。如果我处于开发人员模式,则使用.env文件中的本地database_url;如果我处于生产模式,则使用docker compose中定义的秘密。
当我在主管中有第二个程序时,就会发生问题,就像这样:
[program:messenger-consume]
command=bash -c "export APP_ENV=%(ENV_APP_ENV)s && /usr/local/bin/launch.sh"
user=root
和launch.sh:
if [ "$APP_ENV" = "prod" ]; then
php /srv/app/bin/console messenger:consume async --time-limit=3600 --memory-limit=128M -vv
fi
在这里失败了,出现了如下所示的教义错误:
Access denied for user 'myname'@'10.0.1.4' (using password: YES)
实际上,'myname'是.env(对于开发环境)中我的database_url dsn(对于原则)的默认值。
此主管问题与我自己无法执行教义命令这一事实有关。我的意思是我跑步时:
docker exec -i $(docker ps -q -f name="php*") sh
连接到我的容器,在容器内之后,我想执行以下操作:
./bin/console doctrine:migrations:migrate
它也不起作用(与主管中的错误相同)。
总而言之,当由我或主管执行时,docker swarm机密不会“计算”,它们正在读取.env中的默认值,而不读取swarm中的值秘密...我不知道该如何解决。 我试图将其添加到docker exec -e DATABASE_URL = / run / secrets / doctrine_dsn中,但是它也不起作用(除非我给出了秘密准则dsn的真实价值)。
任何帮助都会很棒 非常感谢
解决方法
我终于找到了答案。
我需要在每个需要环境变量的脚本中添加此功能:
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
在Supervisor中,我需要导出原始的环境变量名称,以便能够通过在命令中执行以下操作来“重新计算”:
bash -c "export DATABASE_URL_FILE=%(ENV_DATABASE_URL_FILE)s && /usr/local/bin/launch.sh"
我不了解所有内容,但我认为该函数正在导出env var,但暂时可以在脚本内部使用。因此,每次我需要自己使用一个群秘密(在docker compose中这样声明的秘密:DATABASE_URL_FILE = / run / secrets / doctrine_dsn) 我需要将该功能应用于相对环境变量。 我希望很清楚:)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。