无法在 docker 中导入 psycopg2._psycopg

Can't Import psycopg2._psycopg Inside a docker

我正在尝试使用以下 requirement.txt 文件构建 docker 图像 但是当我调用我的 python 函数时,有一部分调用 redshift 数据库来执行查询和提取数据,然后我得到一个错误:

ImportError: /usr/local/lib/python2.7/site-packages/psycopg2/.libs/libresolv-2-c4c53def.5.so: symbol __res_maybe_init version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

python-dateutil==2.6.0
numpy==1.12.0
jsonschema==2.6.0
pandas==0.20.3
python-consul==0.7.2
boto==2.49.0
datadog==0.15.0
invoke==1.4.1
SQLAlchemy==1.1.5
graypy==0.2.14
llvmlite==0.31.0
fastparquet==0.2.1
simple-salesforce==0.74.2
pytz==2019.1
psycopg2==2.7.1

我的 docker 文件是:

FROM python:2.7
ENV COLLECTION aa
ENV TASK_PARAMS aa
RUN apt-get update -y && \
    apt-get install -y python-pip python-dev

WORKDIR /opt/airflow_repository
ADD analytics ./analytics
ADD FrameworkPY ./FrameworkPY
COPY requirements.txt requirements.txt
ENV PYTHONPATH ${PYTHONPATH}:/opt/airflow_repository/similarweb_analytics
ENV INI_ENVIRONMENT_SETTINGS_PATH=/etc/


RUN pip install -r requirements.txt

CMD invoke -c $COLLECTION mainrun $TASK_PARAMS

构建 docker 图像后,我正在尝试 运行 一个 python 脚本来从我的 redshift 中读取数据: 使用以下命令: docker 运行 -it -e COLLECTION=/opt/airflow_repository/ods/sf/sf_to_ods -e TASK_PARAMS="--工作类型 /opt/airflow_repository/ods/sf/configs/sf_contact_delta.json" airflow_bidev

我得到以下错误回溯:

pid 6 - 2020-04-29 20:34:27,083 - INFO - sf_to_ods.py - run - line 60 - starting sf_to_ods
Setting value
pid 6 - 2020-04-29 20:34:27,087 - INFO - consul_connections.py - get_connection_settings - line 15 - retrieving general_settings connection settings from consul
pid 6 - 2020-04-29 20:34:28,412 - INFO - consul_connections.py - get_connection_settings - line 15 - retrieving sf connection settings from consul
pid 6 - 2020-04-29 20:34:29,003 - INFO - consul_connections.py - get_connection_settings - line 15 - retrieving etl connection settings from consul
pid 6 - 2020-04-29 20:34:29,314 - ERROR - sf_to_ods.py - run - line 165 - /usr/local/lib/python2.7/site-packages/psycopg2/.libs/libresolv-2-c4c53def.5.so: symbol __res_maybe_init version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference
Traceback (most recent call last):
  File "/usr/local/bin/invoke", line 8, in <module>
    sys.exit(program.run())
  File "/usr/local/lib/python2.7/site-packages/invoke/program.py", line 384, in run
    self.execute()
  File "/usr/local/lib/python2.7/site-packages/invoke/program.py", line 566, in execute
    executor.execute(*self.tasks)
  File "/usr/local/lib/python2.7/site-packages/invoke/executor.py", line 129, in execute
    result = call.task(*args, **call.kwargs)
  File "/usr/local/lib/python2.7/site-packages/invoke/tasks.py", line 127, in __call__
    result = self.body(*args, **kwargs)
  File "//opt/airflow_repository/similarweb_analytics/ods/sf/sf_to_ods.py", line 244, in mainrun
    run(**module_config_)
  File "/opt/airflow_repository/FrameworkPY/vbi_utils/decorating_utils.py", line 89, in wrapped_func
    res = func(*args, **utils.get_config_dict_from_path(**kwargs))
  File "/opt/airflow_repository/FrameworkPY/vbi_utils/decorating_utils.py", line 100, in wrapped_func
    res = func(*formatted_args, **formatted_kwargs)
  File "/opt/airflow_repository/FrameworkPY/vbi_utils/decorating_utils.py", line 79, in wrapped_func
    res = func(*args, **kwargs)
  File "//opt/airflow_repository/similarweb_analytics/ods/sf/sf_to_ods.py", line 70, in run
    kwargs = results_container.get_increment(**kwargs)
  File "/opt/airflow_repository/similarweb_analytics/results_container/results_container.py", line 342, in get_increment
    kwargs.update(inc_util.get_from_val(**kwargs))
  File "/opt/airflow_repository/similarweb_analytics/sw_utils/increment_utils.py", line 25, in get_from_val
    if not kv.get(**kwargs):
  File "/opt/airflow_repository/FrameworkPY/fw_utils/key_val.py", line 80, in get
    engine_ = alch_engine.create_engine(config_.get(DB_ENGINE))
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/__init__.py", line 387, in create_engine
    return strategy.create(*args, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/engine/strategies.py", line 80, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "/usr/local/lib/python2.7/site-packages/sqlalchemy/dialects/postgresql/psycopg2.py", line 554, in dbapi
    import psycopg2
  File "/usr/local/lib/python2.7/site-packages/psycopg2/__init__.py", line 50, in <module>
    from psycopg2._psycopg import (                     # noqa
ImportError: /usr/local/lib/python2.7/site-packages/psycopg2/.libs/libresolv-2-c4c53def.5.so: symbol __res_maybe_init version GLIBC_PRIVATE not defined in file libc.so.6 with link time reference

您应该更新 psycopg2 至少 2.7.3.1 避免与 glibc 2.26

的兼容性问题

来自 release notes

Dropped libresolv from wheel package to avoid incompatibility with glibc 2.26 (wheels ticket #2).