2015-05-11 16 views
9

Có ai đó đã thử sử dụng biến môi trường để ghi đè tùy chọn cấu hình trong sổ đăng ký, giả sử bạn phải sử dụng nhóm s3 làm bộ nhớ. Tôi đọc doc và nó nói (https://docs.docker.com/registry/configuration/):Trình đăng ký Docker: 2.0 ghi đè tùy chọn cấu hình

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 

Vì vậy, tôi đã cố gắng lệnh này, nhưng nó dường như không có bất kỳ tác dụng khi tôi bắt đầu đăng ký:

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 

Trong các bản ghi tôi xem đầu ra thường xuyên như thể nó không mất các biến env vào tài khoản và cố gắng kết nối với 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: Nếu tôi sử dụng một vai trò quan IAM với eC2 của tôi, có vẻ như không cần thiết để vượt qua trong việc tiếp cận và chìa khoá bí mật để docker container đăng ký, có thể docker sử dụng vai trò IAM được nêu ra, có ai đã thử điều đó?

Edit: Sau khi tôi chạy container và lệnh exec để xem sản phẩm của env:

[email protected]:/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 
[email protected]:/go/src/github.com/docker/distribution# 
+0

Bạn có thể vui lòng 'docker exec -it myContainer/bin/bash' (hoặc bất kỳ tên vùng chứa nào của bạn) và đổ nội dung của' env' vào đây? Tôi có thể tiêm thông tin đăng nhập AWS S3 qua các biến môi trường. – L0j1k

+0

Vui lòng xem OP trong phần "Chỉnh sửa" (phần cuối) – alexfvolk

Trả lời

14

hoàn chỉnh lệnh mà làm việc cho tôi từ một lệnh docker run là:

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 

Lưu ý việc bổ sung các biến REGISTRY_STORAGE=s3 môi trường.

Họ gợi ý này trong registry docs:

Lưu ý: Nếu một biến môi trường thay đổi một giá trị bản đồ vào một chuỗi, như thay thế các loại ổ lưu trữ với REGISTRY_STORAGE = hệ thống tập tin, sau đó tất cả phụ các trường sẽ bị xóa. Như như vậy, việc chỉ định loại lưu trữ trong môi trường sẽ xóa tất cả các tham số có liên quan đến cấu hình bộ nhớ cũ.

+3

Trên AWS EC2, bạn có thể bỏ qua các khóa truy cập và khóa bí mật nếu bạn chỉ định vai trò EC2 của bạn là vai trò IAM. –

+1

Mẹo hay, @TedZlatanov! Ngoài ra - tôi nên đề cập đến bất cứ ai đọc - bạn có thể (và nên) sử dụng một người dùng IAM mới cho việc này. Nếu sử dụng IAM, bạn vẫn có thể sử dụng các khóa truy cập và các khóa bí mật - nhưng thật tuyệt khi biết có những trường hợp sử dụng mà bạn có thể bỏ qua chúng! –

3

Tôi tải accesskey và secretkey qua biến môi trường trong lệnh docker run tôi. Tuy nhiên, tôi chỉ định tên và vùng chứa của mình trong tệp cấu hình và trong quá trình tìm kiếm các giải pháp cho vấn đề của mình, có vẻ như bạn phải chỉ định tên vùng và nhóm trong tệp cấu hình. Bất kỳ lúc nào tôi cố gắng chỉ định các biến môi trường này trong lệnh docker run của mình, tôi gặp lỗi và vùng chứa không bắt đầu. Tôi khuyên bạn nên tải thông tin này thông qua tệp cấu hình (và thả các cờ đó trong lệnh docker run) và chỉ định khóa truy cập và khóa bí mật của bạn thông qua các biến môi trường như bạn. Tôi đã dành một chút thời gian đào thông qua nguồn thông tin về lý do tại sao điều này không làm việc theo cách chúng ta nghĩ rằng nó nên, nhưng không đi qua bất cứ điều gì thực sự hữu ích. Tôi nghĩ rằng nó phải là một cái gì đó mà AWS S3 không thích, nhưng tôi đã không nhận được xa cố gắng để làm sáng tỏ rằng kể từ khi nó làm việc cho tôi trong cấu hình trên. Chúc may mắn!

PS: Liên quan đến quyền truy cập IAM của bạn, there are some comments in the source có thể giúp bạn biết được điều gì sẽ xảy ra.

+1

Chỉ cần xác nhận - khi bạn nói chỉ định tên trong tệp cấu hình, điều đó có nghĩa là tôi phải tạo hình ảnh từ dockerfile? Một lưu ý khác - Tôi đã cố thay đổi các tùy chọn cấu hình và xây dựng dockerfile. Tôi chỉ cần thêm khu vực và tên nhóm và để trống khóa truy cập và khóa bí mật vì tôi đã gắn vai trò IAM với quyền truy cập vào nhóm. Tôi đoán quá trình vẫn còn một chút trong giai đoạn đầu cho reg 2.0 vì bạn phải xây dựng hình ảnh chỉ để xác định các tùy chọn cấu hình khác nhau – alexfvolk

+0

Thành thật mà nói, tôi sẽ tải xuống [repo phân phối] (https: // github. com/docker/distribution) và xây dựng hình ảnh đăng ký của riêng bạn từ Dockerfile được cung cấp trong thư mục gốc của dự án. Đây là những gì được đề nghị. Nhưng quan trọng, nó cho phép bạn thêm một khối lượng vào thùng chứa kết quả mà bạn có thể đặt tệp config.yml của mình. Đây là những gì tôi đã làm để có được đăng ký chạy (kể từ khi sử dụng hình ảnh đăng ký kho v2 là một nhức đầu cho tôi vì lý do cấu hình). Tôi hy vọng tôi không quá khó hiểu với đề xuất này! – L0j1k

+0

Và vâng, hoàn toàn, v2 đăng ký là thương hiệu-spanking mới. Như bạn có thể đã biết, API của nó là khá trần so với v1, nhưng tôi đã có rất ít vấn đề với v2 đã hơn tôi đã cố gắng để có được đăng ký v1 để làm việc. – L0j1k

Các vấn đề liên quan