我有一个流光应用程序,我使用pymesh/pymesh图像在docker中创建了一个图像。
我能够成功地构建图像。但是,当我尝试使用
docker run -p 8501:8501 meshnetapp:latest
我得到以下错误:
2021-10-15 10:50:57.500 Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/streamlit/script_runner.py", line 354, in _run_script
exec(code, module.__dict__)
File "/app/dockerapp.py", line 20, in <module>
from preprocess import extract_features
File "/app/preprocess.py", line 4, in <module>
import pymesh
File "/usr/local/lib/python3.6/site-packages/pymesh/__init__.py", line 18, in <module>
from .Mesh import Mesh
File "/usr/local/lib/python3.6/site-packages/pymesh/Mesh.py", line 5, in <module>
import PyMesh
ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /usr/local/lib/python3.6/site-packages/pymesh/lib/PyMesh.cpython-36m-x86_64-linux-gnu.so)
我尝试使用以下命令手动安装libstdc++:
apt-get update
apt-get install libstdc++6
但这似乎也不能解决问题。
这是我的dockerfile:FROM pymesh/pymesh:latest
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
RUN apt-get update
RUN apt-get install libstdc++6
EXPOSE 8501
COPY . /app
ENTRYPOINT ["streamlit", "run"]
CMD ["dockerapp.py"]
如果我理解你的Dockerfile流,似乎你有一个操作顺序错误。在安装所需的库之前,运行pip install
来执行Python流程。这似乎是正确的顺序:
FROM pymesh/pymesh:latest
WORKDIR /app
COPY requirements.txt ./requirements.txt
RUN apt-get update
RUN apt-get install libstdc++6
RUN pip install -r requirements.txt
EXPOSE 8501
COPY . /app
ENTRYPOINT ["streamlit", "run"]
CMD ["dockerapp.py"]
我明白了。我得到错误背后的原因是由于pymesh和streamlit库不能一起工作的一些问题。当我在同一个py文件中导入这两个库时,我才会得到这个错误。