docker - 在 alpine 容器中使用 confluent-kafka python 客户端

我正在尝试运行一个与 kafka 通信的简单 python 应用程序。我正在寻找使用 Alpine 容器。这是我当前的 dockerfile(它不是最佳的......只是试图让事情暂时正常)。

FROM python:3.6-alpine
MAINTAINER Ashic Mahtab (ashic@live.com)

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN apk update && apk --no-cache add librdkafka


COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt

COPY api /usr/src/app/api
COPY static /usr/src/app/static

CMD ["python", "api/index.py"]

需求文件中有confluent-kafka。构建失败

OK: 8784 distinct packages available
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz
ERROR: unsatisfiable constraints:
  so:libcrypto.so.41 (missing):
    required by:
                 librdkafka-0.9.4-r1[so:libcrypto.so.41]
                 librdkafka-0.9.4-r1[so:libcrypto.so.41]
                 librdkafka-0.9.4-r1[so:libcrypto.so.41]
  so:libssl.so.43 (missing):
    required by:
                 librdkafka-0.9.4-r1[so:libssl.so.43]
                 librdkafka-0.9.4-r1[so:libssl.so.43]
                 librdkafka-0.9.4-r1[so:libssl.so.43]

我的问题是 a) 有没有办法在不构建容器的情况下使其工作?如果我可以简单地将库复制到 alpine 就足够了。或者即使我可以复制 librdkafka。 b)如果没有,我怎样才能让 libssl 和 libcryto.so 工作?

最佳答案

这里有一个让它工作的方法:

FROM python:3.6-alpine
MAINTAINER Ashic Mahtab (ashic@live.com)

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN sed -i -e 's/v3\.4/edge/g' /etc/apk/repositories \
    && apk upgrade --update-cache --available \
    && apk --no-cache add librdkafka

COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt

COPY api /usr/src/app/api
COPY static /usr/src/app/static

CMD ["python", "api/index.py"]

这里解释一下:

python:3.6-alpine 镜像基于 alpine linux 3.4: Dockerfile

所以你首先需要正确移动到边缘 Alpine 分支:Edge
这是通过以下方式完成的:

RUN sed -i -e 's/v3\.4/edge/g' /etc/apk/repositories \
    && apk upgrade --update-cache --available \

然后你就可以安装librdkafka和依赖了。

https://stackoverflow.com/questions/43664505/

相关文章:

react-native - redux-observable 获取当前位置

java - 找不到属性 : Error in spring boot 的设置方法

regex - 正则表达式 : convert a list of name and value p

java - 使用 lambda 计算列表中的列表

java - 将 long 列表转换为 double 列表

pymc3 - BetaBinomial 和 "Beta and Binomial"之间的区别

sql - 为什么我需要在重命名之前将数据库设置为 single_user?

azure - 在 Debian 上安装 AzureAD 模块

python-3.x - 为什么 Python 找到与 Windows 不同的文件大小?

atom-editor - 原子氢 : How is "run cell" used?