我尝试部署S3支持的私有docker注册表,并且在尝试启动注册表容器时收到错误。我的docker-compose.yml看起来像这样:
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_STORAGE_S3_ACCESSKEY: myKey
REGISTRY_STORAGE_S3_SECRETKEY: mySecret
REGISTRY_STORAGE_S3_BUCKET: docker.registry.bucket
REGISTRY_STORAGE_S3_ROOTDIRECTORY: registry/data
volumes:
- /home/docker/certs:/certs
当我尝试运行sudo docker-compose up -d
时,我收到以下错误消息:
registry_1 | panic: multiple storage drivers specified in configuration or environment: s3, filesystem
似乎我在我的环境中遗漏了明确选择s3的内容,但从文档中不清楚如何做到这一点。
答案 0 :(得分:12)
我试图通过使用ENV vars来覆盖存储配置。这个解决方法完成了这项工作(以json格式):
{
"REGISTRY_STORAGE": "s3",
"REGISTRY_STORAGE_S3_REGION": <REGION>,
"REGISTRY_STORAGE_S3_BUCKET": <BUCKET_NAME>,
"REGISTRY_STORAGE_S3_ROOTDIRECTORY": <ROOT_PATH>,
"REGISTRY_STORAGE_S3_ACCESSKEY": <KEY>,
"REGISTRY_STORAGE_S3_SECRETKEY": <SECRET>
}
通过定义REGISTRY_STORAGE
,我们会覆盖config.yml
中的那个。
答案 1 :(得分:2)
您收到此错误是因为registry:2
图片附带了一个使用文件系统存储的默认配置文件/etc/docker/registry/config.yml
。
通过使用环境变量添加S3存储,有多个存储驱动程序,我想这是不受支持的。
我不知道有什么方法可以删除环境变量的配置选项,所以我认为您可能需要创建一个配置文件并将其挂载为卷(http://docs.docker.com/registry/configuration/#overriding-the-entire-configuration-file)
答案 2 :(得分:0)
我能够使用环境变量来实现这一点。这是我脚本中的代码片段:
-e REGISTRY_STORAGE=s3 \
-e REGISTRY_STORAGE_S3_ACCESSKEY=$AWS_KEY \
-e REGISTRY_STORAGE_S3_SECRETKEY=$AWS_SECRET \
-e REGISTRY_STORAGE_S3_BUCKET=$BUCKET \
-e REGISTRY_STORAGE_S3_REGION=$AWS_REGION \
-e REGISTRY_STORAGE_S3_ROOTDIRECTORY=$BUCKET_PATH \
答案 3 :(得分:0)
在我的案例中,我在docker-compose.yml&amp;中有一个数据环境变量。 config.yml中的S3配置。花了一些时间,但是一旦环境变量被注释掉,注册表:2就会正常启动。
答案 4 :(得分:0)
缺少REGISTRY_STORAGE
环境变量。需要添加到“ env”块中。