python - 使用 lib 时 Docker 映像 python-alpine 失败
问题描述
我有以下 Dockerfile:
FROM python:3.7-alpine
WORKDIR /msa-app/
EXPOSE 3000
ENV LD_LIBRARY_PATH="/usr/local/lib"
ENV LD_RUN_PATH="/usr/local/lib"
ENV SAPNWRFC_HOME="/usr/local/sap/nwrfcsdk"
ENV PATH="${PATH}:/usr/sap/nwrfcsdk/lib"
COPY nwrfcsdk/nwrfcsdk /usr/local/sap/nwrfcsdk
COPY nwrfcsdk/nwrfcsdk.conf /etc/ld.so.conf.d/nwrfcsdk.conf
COPY msa-app /msa-app/
RUN chmod +x /msa-app/entrypoint.sh
ENTRYPOINT /msa-app/entrypoint.sh
使用以下 entrypoint.sh (由于我正在使用的网络中的代理问题,我将所有内容都放在了入口点 - 不要怪我,这是我发现解决问题的唯一方法):
#!/bin/sh
#Creates and activates virtual env
echo "*** Activating Python virtual environment"
python -m venv /msa-app/venv && source /msa-app/venv/bin/activate
echo "*** Installing pip requirements"
pip install --upgrade pip && pip install -r /msa-app/requirements.txt
echo "*** Installing pyrfc"
pip install /msa-app/pyrfc-1.9.95-cp37-cp37m-linux_x86_64.whl
echo "*** Configuring SAPNWRFC PyRFC"
ln -s /usr/bin/python3 python
mkdir -p /etc/ld.so.conf.d/
mkdir -p /usr/sap/
ldconfig /usr/local/lib
#Starts gunicorn for flask
echo "*** Starting application"
cd /msa-app && gunicorn -w 2 -b 0.0.0.0:3000 run:app
但是当我尝试运行容器时,出现以下错误:
ImportError: Error loading shared library libsapnwrfc.so: No such file or directory (needed by /msa-app/venv/lib/python3.7/site-packages/pyrfc/_pyrfc.cpython-37m-x86_64-linux-gnu.so)
但是,当我使用普通的非高山 Python Docker 映像时,不会发生此错误。我究竟做错了什么?谢谢你。
解决方案
推荐阅读
- sql-server - 在 sys.objects 中搜索对象我注意到我的表类型具有 name 列的前缀和后缀
- dart - VSCode 片段将第一个大写字母转换为小写
- asp.net-core - ASP.NET Core 3 - 当工厂方法所需的依赖项可用时,是否可以在 Configure 方法中添加 SignalR 服务?
- kubernetes - 使用 bitnami/rabbitmq 图表从 github 安装额外的 rabbitmq 插件
- kubernetes - Istio 复制的控制平面 - 503 不可用
- c# - 将自定义对象作为参数传递给控制器
- algorithm - 我们可以使用 n(V) <= n(E) 来检测循环,同时将 Kruskal 的 MST 用于无向图吗?
- amazon-web-services - 在 Dockerrun.aws.json 中为 AWS Elastic Beanstalk 使用环境变量或 .env 文件
- python - WinPython 3.8.5 给了我 Python 2.7
- python - 在 Django 中使用 Apache Ignite