我有一些代码可以这样连接到我公司的ldap服务器:
s = Server("ldap-server", use_ssl=True, get_info=ALL)
c = Connection(s, user="uid=login,ou=xx,dc=xx,dc=xx ,dc=xx,dc=xx", password='xxx', auto_bind=True, check_names=True, lazy=False, raise_exceptions=False)
c.open()
c.bind()
当我自己运行脚本时,它返回预期的结果,但是当我在docker-compose文件中运行脚本时,它会因此异常而失败:
ldap3.core.exceptions.LDAPSocketOpenError: ('unable to open socket', [(LDAPSocketOpenError('socket ssl wrapping error: [Errno 0] Error',), ('ldap-server', 636))])
我的docker文件非常简单:
version: '3.2'
services:
test:
build: .
command: python ldp.py
和我的Dockerfile:
Docker文件:
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /test
WORKDIR /test
COPY requirements.txt /test
RUN apt-get update && apt-get install -y python-dev libldap2-dev libsasl2-dev libssl-dev
RUN pip install -r requirements.txt
COPY . /test
更重要的是,当我在其他服务器上运行该文件时,相同的docker-compose文件/容器可以成功运行,因此很明显,该服务器存在一些不同之处,但我不知道要寻找什么。与其他成功服务器上相同的防火墙端口已打开。我该如何解决这个问题?
答案 0 :(得分:0)
我有完全相同的问题。就我而言,它是 nginx 容器。我不得不使用_ssl=False,使其适用于容器。
有一点,当 use_ssl=True 并且在 nginx 容器内时,仍然没有弄清楚为什么 ldap 身份验证对我们的实验室 ldap 服务器起作用,而不是对 prod ldap 服务器起作用。我不得不使用_ssl=False 使其在实验室和生产环境中都能正常工作。