多个存储驱动程序在私有注册表中出现恐

时间:2015-11-10 08:33:12

标签: docker docker-compose docker-registry

我尝试部署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的内容,但从文档中不清楚如何做到这一点。

5 个答案:

答案 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”块中。