使用环境变量配置Docker Registry中间件参数不生效问题咨询
解决方案
你遇到的问题是对数组类型配置的环境变量命名规则不熟悉,加上测试方式有问题,中间件完全支持通过环境变量配置,无需写配置文件。
正确的变量命名规则
Docker Registry的middleware数组配置有特殊命名逻辑:
- 先用数字下标声明对应位置的中间件名称
- 后续具体参数用中间件名称作为层级键,不能继续用数字下标
针对你需要的cloudfront存储中间件,正确的环境变量写法如下:
# 声明第一个存储中间件为cloudfront REGISTRY_MIDDLEWARE_STORAGE_0_NAME=cloudfront # 配置对应参数 REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_OPTIONS_BASEURL=https://my.cloudfronted.domain.com/ REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_OPTIONS_PRIVATEKEY=/path/to/pem REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_OPTIONS_KEYPAIRID=cloudfrontkeypairid REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_OPTIONS_AWSREGION=us-east-1,us-east-2
你踩的两个坑
- 变量命名错误:你之前尝试的
REGISTRY_MIDDLEWARE_STORAGE_0_OPTIONS_BASEURL写法不生效,数字下标仅用于声明中间件名称,参数配置必须用中间件名称作为下一级键。 - 测试方式错误:你手动创建的空配置文件缺少middleware的顶层结构,Registry的配置合并逻辑对缺省结构的数组字段处理异常,测试时不需要指定自定义配置文件,直接用镜像内置的默认配置即可。
验证方法
修改env文件的middleware相关变量为正确格式后,用如下命令启动:
docker run --rm -it -p 5000:5000 --env-file file.env registry:2.7.1
启动后进入容器执行registry dump-config命令,即可看到cloudfront中间件已经正确加载到配置中。
内容的提问来源于stack exchange,提问作者josegomezr
相关产品推荐
相关产品推荐

