使用基于Alpine的Docker映像中的oscrypto库未找到libcrypto

bxgwgixi  于 2022-11-03  发布在  Docker
关注(0)|答案(1)|浏览(296)

我得到的错误与-〉The library libcrypto could not be found中提到的错误完全相同
我理解了这个问题,但是我不能找到解决方案。我需要更新我的lambda配置还是我需要升级我的Python库?
PFB我的需求. txt文件

  1. cryptography==36.0.2
  2. botocore==1.20.0
  3. azure-storage-blob==2.1.0
  4. azure-storage-common==2.1.0
  5. boto3==1.17.0
  6. asn1crypto==1.5.1
  7. certifi==2022.9.14
  8. cffi==1.15.1
  9. charset-normalizer==2.1.1
  10. filelock==3.8.0
  11. idna==3.4
  12. oscrypto==1.3.0
  13. pycparser==2.21
  14. pycryptodomex==3.15.0
  15. PyJWT==2.5.0
  16. pyOpenSSL==22.0.0
  17. pytz==2022.2.1
  18. requests==2.28.1
  19. typing_extensions==4.3.0
  20. urllib3==1.26.12

我的文件-

  1. FROM python:3.9-alpine3.16
  2. COPY requirements.txt requirements.txt
  3. RUN apk --update --no-cache add --virtual build-dependencies gcc python3-dev musl-dev libc-dev linux-headers libxslt-dev libxml2-dev py-pip ca-certificates wget libffi-dev openssl-dev python3-dev expat==2.4.9-r0 py-pip build-base zlib zlib-dev libressl libressl-dev \
  4. && apk add python3 make g++ \
  5. && pip install --upgrade pip \
  6. && pip install --upgrade pip setuptools \
  7. && pip install -r requirements.txt \
  8. && apk del build-dependencies
  9. RUN pip install snowflake-connector-python==2.8.0 --no-use-pep517
  10. RUN python -c 'from oscrypto import asymmetric'

尝试使用上面的Dockerfile执行docker build会导致失败,错误如下:

  1. Step 4/4 : RUN python -c 'from oscrypto import asymmetric'
  2. ---> Running in dc8f8b8920ac
  3. Traceback (most recent call last):
  4. File "<string>", line 1, in <module>
  5. File "/usr/local/lib/python3.9/site-packages/oscrypto/asymmetric.py", line 19, in <module>
  6. from ._asymmetric import _unwrap_private_key_info
  7. File "/usr/local/lib/python3.9/site-packages/oscrypto/_asymmetric.py", line 27, in <module>
  8. from .kdf import pbkdf1, pbkdf2, pkcs12_kdf
  9. File "/usr/local/lib/python3.9/site-packages/oscrypto/kdf.py", line 9, in <module>
  10. from .util import rand_bytes
  11. File "/usr/local/lib/python3.9/site-packages/oscrypto/util.py", line 14, in <module>
  12. from ._openssl.util import rand_bytes
  13. File "/usr/local/lib/python3.9/site-packages/oscrypto/_openssl/util.py", line 6, in <module>
  14. from ._libcrypto import libcrypto, libcrypto_version_info, handle_openssl_error
  15. File "/usr/local/lib/python3.9/site-packages/oscrypto/_openssl/_libcrypto.py", line 9, in <module>
  16. from ._libcrypto_cffi import (
  17. File "/usr/local/lib/python3.9/site-packages/oscrypto/_openssl/_libcrypto_cffi.py", line 27, in <module>
  18. raise LibraryNotFoundError('The library libcrypto could not be found')
  19. oscrypto.errors.LibraryNotFoundError: The library libcrypto could not be found
  20. The command '/bin/sh -c python -c 'from oscrypto import asymmetric'' returned a non-zero code: 1
2sbarzqh

2sbarzqh1#

异常发生在https://github.com/wbond/oscrypto/blob/1.3.0/oscrypto/_openssl/_libcrypto_cffi.py
通过跟踪oscrypto._ffi,问题归结为使用ctypes库打开libcrypto的问题:

  1. >>> import ctypes.util
  2. >>> ctypes.util.find_library('crypto')
  3. >>>

为什么?因为/usr/lib只有libcrypto.so.1.1,而没有指向它的libcrypto.so符号链接。只需在您的Dockerfile中添加一行即可轻松修复:

  1. RUN ln -s libcrypto.so.1.1 /usr/lib/libcrypto.so

......之后Python的ctypes行为:

  1. >>> from ctypes.util import find_library
  2. >>> find_library('crypto')
  3. 'libcrypto.so.1.1'

......奥斯卡也是:

  1. >>> from oscrypto import asymmetric
  2. >>>
展开查看全部

相关问题