在docker容器中使用ldap3'无法打开套接字'

时间:2019-09-09 18:04:43

标签: python docker docker-compose ldap

我有一些代码可以这样连接到我公司的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文件/容器可以成功运行,因此很明显,该服务器存在一些不同之处,但我不知道要寻找什么。与其他成功服务器上相同的防火墙端口已打开。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我有完全相同的问题。就我而言,它是 nginx 容器。我不得不使用_ssl=False,使其适用于容器。

有一点,当 use_ssl=True 并且在 nginx 容器内时,仍然没有弄清楚为什么 ldap 身份验证对我们的实验室 ldap 服务器起作用,而不是对 prod ldap 服务器起作用。我不得不使用_ssl=False 使其在实验室和生产环境中都能正常工作。