有没有一种简单的方法来使用 LDAP 配置 Docker Private Registry 2.0?
Posted
技术标签:
【中文标题】有没有一种简单的方法来使用 LDAP 配置 Docker Private Registry 2.0?【英文标题】:Is there a simple way to configure Docker Private Registry 2.0 with LDAP? 【发布时间】:2016-09-29 09:19:57 【问题描述】:我正在尝试按照该说明进行操作:
https://www.digitalocean.com/community/tutorials/how-to-set-up-a-private-docker-registry-on-ubuntu-14-04
在我的 RHEL7(3.10 内核)机器上。但它会是连接 LDAP 的更快、更简单的方法吗?我已经使用 TLS 自签名证书启动并运行私有注册表 2.0。我能够从外部服务器推送和拉取图像,但仍在寻找快速选项以放入我的命令中以使注册表与 LDAP 一起运行。
现在我正在使用该命令运行我的 Docker:
docker run -d -p 5000:5000 --restart=always --name Docker_registry -v /data/docker_registry:/var/lib/registry -v /etc/docker/certs.d:/etc/docker/certs.d -e REGISTRY_HTTP_TLS_CERTIFICATE=/etc/docker/certs.d/d-l-tools.ocnet.local.crt -e REGISTRY_HTTP_TLS_KEY=/etc/docker/certs.d/d-l-tools.ocnet.local.key registry:2
你能帮我吗?如果我告诉 nginx 使用 LDAP,我会收到此错误:
nginx_1 | 2016/05/31 10:37:31 [emerg] 1#1: unknown directive "ldap_server" in /etc/nginx/conf.d/registry.conf:31
nginx_1 | nginx: [emerg] unknown directive "ldap_server" in /etc/nginx/conf.d/registry.conf:31
docker_nginx_1 exited with code 1
似乎需要一个模块才能使用ldap,但是当nginx只是一个docker容器的时候怎么添加呢?
已编辑:
我也试过这个方法: https://github.com/cesanta/docker_auth
但是当我使用那个命令时:
docker run --rm -it --name docker_auth -p 5001:5001 -v /data/docker_registry/docker/docker_auth-master:/config:ro -v /var/log/docker_auth:/logs cesanta/docker_auth:stable /data/docker_registry/docker/docker_auth-master/docker-compose.yml
我收到了那个错误:
F0601 10:42:30.862161 1 main.go:167] Failed to load config: could not read /data/docker_registry/docker/docker_auth-master/docker-compose.yml: open /data/docker_registry/docker/docker_auth-master/docker-compose.yml: no such file or directory
在那次错误之后,我将所有配置推送到 /tmp 并从那里开始,但我遇到了同样的问题(即使我对 docker-compose.yml 文件有 777 权限)。
我的 docker-compose.yml 看起来像这样:
server:
addr: :5001
certificate: /data/docker_registry/docker/certs/docker-registry.crt
key: /data/docker_registry/docker/certs/docker-registry.key
token:
issuer: Acme auth server
expiration: 900
ldap_auth:
# Addr is the hostname:port or ip:port
addr: "ldaps://ldap.xxxxxx.com:636/OU=ROOT,DC=xxxxx,DC=local?sAMAccountName?sub?(&(memberOf:1.2.840.113556.1.4.1941:=cn=xx_DOCKER_USERS,OU=xxxx,OU=Groups,OU=GLOB000,OU=Global,OU=ROOT,DC=xxxxx,DC=local)(objectClass=person))" SSL
# Setup tls connection method to be
# "" or "none": the communication won't be encrypted
# "always": setup LDAP over SSL/TLS
# "starttls": sets StartTLS as the encryption method
tls: always
# set to true to allow insecure tls
insecure_tls_skip_verify: false
# In case bind DN and password is required for querying user information,
# specify them here. Plain text password is read from the file.
bind_dn: "CN=xx_Docker_xx,OU=xxxxx_xxxxx,OU=xxxxxx,OU=xxxxxx,OU=xxxxx,OU=Root,DC=xxxxx,DC=local"
bind_password_file: xxxxxxxx
# User query settings. $account is expanded from auth request
#base: o=example.com
#filter: (&(uid=$account)(objectClass=person))
acl:
# This will allow authenticated users to pull/push
- match:
account: /.+/
actions: ['*']
registry:
restart: always
image: registry:2
# hostname: "Registry_docker"
environment:
- REGISTRY_DELETE_ENABLED=true
volumes:
- /data/docker_registry:/var/lib/registry
ports:
- 5000:5000
我在 docker 上运行:
cesanta]# docker version
Client:
Version: 1.11.1
API version: 1.23
Go version: go1.5.4
Git commit: 5604cbe
Built: Wed Apr 27 00:34:42 2016
OS/Arch: linux/amd64
Server:
Version: 1.11.1
API version: 1.23
Go version: go1.5.4
Git commit: 5604cbe
Built: Wed Apr 27 00:34:42 2016
OS/Arch: linux/amd64
这似乎更好更容易,但不知何故它无法读取我的配置文件...感谢您的所有回答。
【问题讨论】:
【参考方案1】:最后我使用了那个解决方案:
https://github.com/tierratelematics/existing-ldap-docker-registry
LDAP 连接存在一些 TLS 问题(我使用了 ldaps://),并且我应该升级 openSSL(我有 1.0.1 版本),但最后它似乎是一个运行良好的最简单选项, 作为
https://github.com/cesanta/docker_auth
暂时不适合我。
【讨论】:
以上是关于有没有一种简单的方法来使用 LDAP 配置 Docker Private Registry 2.0?的主要内容,如果未能解决你的问题,请参考以下文章
将 LDAP 配置从 Websphere 迁移到 Liberty
有没有一种干净的方法来使用 symfony 2.6 设置 websocket
网络系统管理赛项之debian 十七 . LDAP服务器搭建及配置方法
有没有一种有效的方法来使用正则表达式从 HTML 字符串中提取数据? [复制]