我认为我的环境存在配置错误问题,我想听听您对此的意见。非常欢迎提供解决问题的建议或帮助。
描述: 我在通过虚拟主机名使用 jwilder/nginx-proxy 容器访问 LDAP Admin 时遇到问题,同时通过具有公开端口的真实 linux 主机名进行访问工作正常。使用有效的通配符证书通过 HTTPS 进行访问。
环境: 我在 linux (CentOS 7) 上运行 docker,我想设置一个带有 jwilder/nginx-proxy 的 docker 容器和另外两个 docker 容器:一个用于 openLdap,第二个用于 phpLdapAdmin。因此,将通过 nginx 访问我的 ldapadmin,而不会暴露端口。
到目前为止完成的步骤:
1。创建容器-nginx代理
docker run -d -p 80:80 -p 443:443 \
-v /home/admin/nginx/certs:/etc/nginx/certs \
-v /var/run/docker.sock:/tmp/docker.sock:ro \
--name proxy \
jwilder/nginx-proxy
2。创建容器-ldap
docker run --name ldap -p 636:636 \
-v /home/admin/nginx/certs:/container/service/slapd/assets/certs \
-v /data/slapd/database:/var/lib/ldap \
-v /data/slapd/config:/etc/ldap/slapd.d \
--hostname ldap.company.com \
--add-host=ldap.company.com:192.168.168.168 \
--env LDAP_ORGANISATION='Company ltd' \
--env LDAP_DOMAIN='company.com' \
--env LDAP_ADMIN_PASSWORD='Password' \
--detach osixia/openldap:1.2.2 \
而不是“192.168.168.168”是我真正的公共(public)IP地址
然后成功搜索到LDAP
docker exec ldap \
ldapsearch -x -H ldap://ldap.company.com \
-b dc=company,dc=com \
-D "cn=admin,dc=company,dc=com" \
-w Password\
3。创建容器phpldapadmin
docker run \
--name ldapadmin \
--env PHPLDAPADMIN_LDAP_HOSTS=ldap.company.com \
--expose 389 \
-e VIRTUAL_HOST=ldap.company.com \
-e VIRTUAL_PORT=389 \
--volume /home/admin/nginx/certs:/container/service/phpldapadmin/assets/apache2/certs \
--env PHPLDAPADMIN_HTTPS_CRT_FILENAME=ldap.company.com.crt \
--env PHPLDAPADMIN_HTTPS_KEY_FILENAME=ldap.company.com.key \
--env PHPLDAPADMIN_HTTPS_CA_CRT_FILENAME=ldap.company.com.crt \
--detach osixia/phpldapadmin:0.7.2
最后重启nginx代理容器自动添加ldap和ldapadmin到nginx配置。
docker 重启代理
然后我得到这个暴露的端口:
图像端口名称
osixia/phpldapadmin:0.7.2 80/tcp, 389/tcp, 443/tcp ldapadmin
osixia/openldap:1.2.2 389/tcp, 0.0.0.0:636->636/tcp ldap
奇怪的是,我的 Linux 服务器的主机名是 dev.company.com 和一些公共(public)地址,我可以使用 https://dev.company.com:6443 访问我的 ldapadmin| ,但我无法通过 URL:ldap.company.com 访问,而不公开端口。我无法在 Linux 主机上 ping ldap.company.com.key。
注意: 我为 Jenkins 做了同样的事情:
docker run -d --rm -u root -v/var/run/docker.sock:/var/run/docker.sock -v jenkins-data:/var/jenkins_home -v "$HOME":/home -e VIRTUAL_HOST=jenkins.company.com -e VIRTUAL_PORT=8080 --name nj jenkins
对于人工制品:
docker run --name artifact -d -v/var/opt/jfrog/artifactory:/var/opt/jfrog/artifactory -e VIRTUAL_HOST=artifactory.company.com -e VIRTUAL_PORT=8081 artifactory-oss
对于这两个,我都有可 ping 通的 URL,它们返回我的公共(public) IP 地址,我通过浏览器成功访问了它们: jenkins.company.com 和 artifactory.company.com
我无法在 Linux 主机上 ping ldap.company.com.key。
最佳答案
致那些在黑暗中跌跌撞撞的人: 由于代理正在处理 HTTPS 内容,因此您不需要 apache 因此,您使用以下环境变量运行 phpldapadmin:
environment:
- PHPLDAPADMIN_TRUST_PROXY_SSL=true
- PHPLDAPADMIN_HTTPS=false
您不会为 docker 镜像公开任何端口,因为 nginx-proxy 在内部处理所有网络。
有同样的问题,但已解决,考虑过这样做,因为 letsencrypt-proxy-companion 设置“高级设置”的方式
关于Docker nginx proxy, open ldap and phpldapadmin - 无法通过nginx访问ldap admin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53340099/