Docker注册表:2.0覆盖配置选项

时间:2015-05-11 21:18:43

标签: amazon-s3 docker environment-variables docker-registry

是否有人尝试使用环境变量来覆盖注册表中的配置选项,例如,如果必须使用s3存储桶作为存储。我阅读了文档并且说(https://docs.docker.com/registry/configuration/):

Overriding configuration options
Environment variables may be used to override configuration parameters other than 
version. To override a configuration option, create an environment variable named 
REGISTRY_variable_ where variable is the name of the configuration option.

e.g

REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/tmp/registry/test

will set the storage root directory to /tmp/registry/test

所以我尝试了这个命令,但是当我启动注册表时似乎没有任何效果:

docker run -it -v /var/log/docker-registry:/var/log -p 5000:5000 \
-e REGISTRY_STORAGE_S3_ACCESSKEY=****************** \
-e REGISTRY_STORAGE_S3_SECRETKEY=****************** \
-e REGISTRY_STORAGE_S3_BUCKET=itmcc-docker-registry-backend \
-e REGISTRY_STORAGE_S3_REGION=us-east-1 \
registry:2.0

在日志中,我看到常规输出,好像它没有考虑env变量并尝试连接到S3:

INFO[0000] endpoint local-8082 disabled, skipping        environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0
INFO[0000] endpoint local-8083 disabled, skipping        environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0
INFO[0000] using inmemory layerinfo cache                environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0
INFO[0000] listening on :5000                            environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0
INFO[0000] Starting upload purge in 42m0s                environment=development instance.id=025c9fcd-2ec1-4d5f-82ec-d3246d54cdb5 service=registry version=v2.0.0
INFO[0000] debug server listening localhost:5001

PS:如果我在ec2中使用IAM角色,将访问和密钥传递给docker注册表容器似乎是多余的,Docker是否可以使用IAM角色,是否有人尝试过?

编辑: 在我运行container和exec命令以查看env:

的输出之后
root@0a349294f792:/go/src/github.com/docker/distribution# env
REGISTRY_STORAGE_S3_SECRETKEY=*************************
DISTRIBUTION_DIR=/go/src/github.com/docker/distribution
GOLANG_VERSION=1.4.2
HOSTNAME=0a349294f792
REGISTRY_STORAGE_S3_BUCKET=itmcc-docker-registry-backend
PATH=/go/bin:/usr/src/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/go/src/github.com/docker/distribution
REGISTRY_STORAGE_S3_REGION=us-east-1
SHLVL=1
HOME=/root
GOPATH=/go/src/github.com/docker/distribution/Godeps/_workspace:/go
REGISTRY_STORAGE_S3_ACCESSKEY=*************************
_=/usr/bin/env
root@0a349294f792:/go/src/github.com/docker/distribution#

3 个答案:

答案 0 :(得分:17)

private static boolean isIPAddressValid(String ip) { boolean result = true; int i = 0; int [] val = new int[4]; if ((ip == null) || (ip.trim().length() == 0)) { //null ip address entered result = false; } else { if (!(ip.contains("."))) { //no '.' found result = false; } else { String [] parts = ip.split("\\."); if (!(parts.length == 4)) { //not 4 quadrants result = false; } else { for (String s : parts) { try { val[i] = Integer.parseInt(s); if ((val[i] < 0) || (val[i] > 255)) { //this quadrant's value exceeds limits result = false; } i++; } catch (Exception e) { //failed to parse quadrant to an integer"); result = false; } } } } } return result; } 命令对我有用的完整命令是:

docker run

请注意添加docker run -d -p 5000:5000 \ -e "REGISTRY_STORAGE=s3" \ -e "REGISTRY_STORAGE_S3_REGION=us-east-1"\ -e "REGISTRY_STORAGE_S3_BUCKET=******"\ -e "REGISTRY_STORAGE_S3_ACCESSKEY=******"\ -e "REGISTRY_STORAGE_S3_SECRETKEY=******"\ registry:2 环境变量。

他们在registry docs

中暗示了这一点
  

注意:如果环境变量将地图值更改为字符串,   例如用。替换存储驱动程序类型   REGISTRY_STORAGE = filesystem,然后将删除所有子字段。如   这样,在环境中指定存储类型将删除所有   与旧存储配置相关的参数。

答案 1 :(得分:7)

尝试将-e REGISTRY_STORAGE=s3添加到docker run命令中。 这会将默认的filesystem配置覆盖为空。

明细:https://github.com/docker/distribution/blob/master/docs/configuration.md&gt;覆盖配置选项&gt;注意

答案 2 :(得分:3)

我在docker run命令中通过环境变量加载accesskey和secretkey。但是,我在配置文件中指定了我的存储桶名称和区域,并且在查找问题的解决方案的过程中,您似乎必须在配置文件中指定区域和存储桶名称。每当我尝试在我的docker run命令中的环境变量中指定这些时,我都会收到错误并且容器无法启动。我建议通过配置文件加载此信息(并在docker run命令中删除这些标志),并通过环境变量指定您的accesskey和secretkey。我花了一些时间在源头上挖掘有关为什么它不按照我们认为应该的方式工作的信息,但没有发现任何真正有用的东西。我认为它必定是AWS S3不喜欢的东西,但我没有试图阐明它,因为它在上述配置中对我有效。祝你好运!

PS:关于您的IAM访问权限,there are some comments in the source可能会帮助您了解所期望的内容。