docker - 使用环境变量进行 Docker 分发中间件配置
问题描述
根据Docker docs,您可以通过以下任一方式配置 docker 注册表映像:
- 构建一个 yaml 文件并安装它。
- 传递环境变量。
而 2. 方法在文档中说:
要覆盖配置选项,请创建一个名为 REGISTRY_variable 的环境变量,其中变量是配置选项的名称,_(下划线)表示缩进级别。例如,您可以配置文件系统存储后端的根目录:
storage: filesystem: rootdirectory: /var/lib/registry
要覆盖此值,请设置如下环境变量:
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere
此变量将 /var/lib/registry 值覆盖到 /somewhere 目录。
尽管有一种情况我无法使其正常工作,但它工作得很好,那就是中间件配置。
我想通过 ENV vars 这个设置
middleware:
storage:
- name: cloudfront
options:
baseurl: https://my.cloudfronted.domain.com/
privatekey: /path/to/pem
keypairid: cloudfrontkeypairid
awsregion: us-east-1, use-east-2
我尝试传递以下环境变量名称:
- REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_BASEURL
- REGISTRY_MIDDLEWARE_STORAGE_0_OPTIONS_BASEURL
但似乎所有这些都被忽略了,我什至试图写错配置(因为这会触发验证错误,我将能够在输出中看到它),但没有成功。
我用这个试过:
# file.env
REGISTRY_LOG_LEVEL="debug"
REGISTRY_HTTP_ADDR=":5000"
REGISTRY_HTTP_SECRET="lol"
REGISTRY_STORAGE_S3_ENCRYPT=true
REGISTRY_STORAGE_S3_ROOTDIRECTORY=/REG
REGISTRY_STORAGE_S3_BUCKET="development-bucket-test"
REGISTRY_STORAGE_S3_ACCESSKEY="AAAAAAAA"
REGISTRY_STORAGE_S3_SECRETKEY="BBBBBBB"
REGISTRY_STORAGE_S3_REGION="XX-TTT-X"
REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_BASEURL="tp:/examplezzz.com"
REGISTRY_MIDDLEWARE_STORAGE_CLOUDFRONT_BASEUL="tp:/examplezzz.com"
REGISTRY_MIDDLEWARE_STORAGE_0_NAME=cloudfront
REGISTRY_MIDDLEWARE_STORAGE_0_OPTIONS_BASEUL="tp:/examplezzz.com"
REGISTRY_MIDDLEWARE_STORAGE_0_OPTIONS__AWSRGION="tp:/examplezzz.com"
# run the registry with
docker run --rm -it -p 5000:5000 --env-file file.env registry:2.7.1 sh -c 'echo "version: 0.1" > /a.conf; registry serve /a.conf'
PS:/a.conf
有没有强制空配置
我是否遗漏了某些内容,或者此设置仅适用于配置文件?
解决方案
我继续自己修改 docker 发行版的源代码,并通过以下方式使其接受配置:
REGISTRY_MIDDLEWARE_STORAGE="[{name: cloudfront, options: {baseurl: 'someurl', privatekey: 'somefile', keypairid: 'somestring'}}]"
推荐阅读
- json - 如何解码并格式化标记的 LocalDateTime 值
- vue.js - v-dialog 上的内容类不显示自己的样式
- angular - Ionic 4 和 Angular 5 离子按钮颜色和属性不起作用
- python - 将转义字符 (\n) 添加到字符串元组中的最后一个元素
- scala - Spark scala完全连接在连接列上输出null
- python - `exec` 是 Scheme 的 `apply` 的 Python 对应项吗?
- javascript - closeOnSelect: false 在使用 dropdownAdapter 时在 Select2 中不起作用
- python - 检查输入时出错:预期 input_2 的形状为 (41,) 但数组的形状为 (1,)
- html - ngIf 用于当前按钮单击
- java - 如何在java中获取输入源设备的硬件ID?