docker容器中的Python3.6无法启动,只会崩溃

2024-09-28 17:23:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这个标题可能有点让人困惑,所以为了澄清一下:docker容器启动时很好。当我试图打开Python时,它总是崩溃。在

我的电脑在Ubunutu上运行。以下是联阿援助团的产出:

Linux work-laptop 4.15.0-39-generic #42-Ubuntu SMP 
Tue Oct 23 15:48:01 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

我有一个基于Python:3.6.3图像。我也尝试过用alpine、jessie、slim和stretch images,以及其他几个3.6版本。他们都有同样的问题。在

我运行名为“nb”的容器,并附加到一个交互式shell:

^{pr2}$

容器启动时没有问题,但是当我试图打开python shell时:

python

我收到一条奇怪的错误消息:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f32546ae700 (most recent call first):
Aborted (core dumped)

我查过$PYTHONPATH和$PYTHONHOME,都没有设置。在

奇怪的是,如果我指定使用Python2.7:

python2

外壳启动没问题。另外,如果我使用3.7映像中的任何一个并打开Python3.7shell,则不会有任何问题。问题似乎仅限于3.6

我在这方面做的研究告诉我,这很可能是环境变量的问题。我尝试过手动将PYTHONHOME设置为这些值(单独设置)

/usr/local/lib
/usr/local/lib/python
/usr/local/lib/python3.6

结果没有改变。唯一的区别是错误消息不再建议设置PYTHONHOME

Fatal Python error: Py_Initialize: Unable to get the locale encoding
ModuleNotFoundError: No module named 'encodings'

Current thread 0x00007f32546ae700 (most recent call first):
Aborted (core dumped)

我认为问题可能出在我的dockerfile中的某个命令上,所以我去掉了所有的内容,只运行了一个未经过滤的python映像。同样的问题。我重新下载,尝试其他图片,没有改变。我无法想象所有(或实际上任何)正式的python映像都会导致这个问题,所以我猜测问题一定出在主机上,但是我找不到任何与此相关的内容。有什么想法吗?在


Tags: to消息prefixlinuxlibusrlocal错误
1条回答
网友
1楼 · 发布于 2024-09-28 17:23:16

解决了我的问题。我在docker-compose文件中添加了一个卷装载,该文件将本地项目目录装入容器python目录中。在

volumes:
    - ./nb/python3.6:/usr/local/lib/python3.6

感谢@EelkevandenBos帮助我认识到问题仅限于docker compose,而在使用docker时并不存在。从那以后问题就很容易找到了。在

我忘了我做过这件事。我的挂载目标是限制下载python库的时间,因为映像使用了许多相当大的库,只要您更改需求列表,就必须重新下载所有库。我的想法是,如果我使用一个卷,那么即使在重新构建容器时,库也会被保存并重新加载,这将导致花费在下载上的时间更少。如果有人对如何做到这一点有任何想法,请在评论中告诉我。在

相关问题 更多 >