是否有人尝试使用环境变量来覆盖注册表中的配置选项,例如,如果必须使用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#
答案 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可能会帮助您了解所期望的内容。