【发布时间】:2020-12-19 03:36:09
【问题描述】:
一位同事和我有一个 Docker 难题。
当我们运行以下命令时,我们会得到不同的结果。
docker run -it python:3.8.6 /bin/bash
pip install fbprophet
对我来说,它安装得很好,而对他来说,它会产生错误并且无法安装。我认为docker的全部目的是防止这种问题,所以我真的很困惑。
我将在下面提供更多详细信息,但我的主要问题是:
- 我们怎么可能得到不同的结果?
更多细节:
我们俩都在 Catalina 上使用类似规格的新 MacBook Pro 运行 Docker。他的 Docker 引擎版本 20.x.x 比我的 19.X.X 稍新。另外:
- 他尝试了所有他能想到的命令来清理 Docker 中的内容。
- 我们验证了图像 ID 的哈希值相同。
- 我们的资源设置也是一样的。
- 他尝试重新安装 Docker 并更改为其他版本的 python (3.7)。
- 在过去三天里,我们多次同时尝试。
结果总是一样的:他得到了错误,而我没有。
他得到的错误如下。
Error:
Installing collected packages: six, pytz, python-dateutil, pymeeus, numpy, pyparsing, pillow, pandas, korean-lunar-calendar, kiwisolver, ephem, Cython, cycler, convertdate, tqdm, setuptools-git, pystan, matplotlib, LunarCalendar, holidays, cmdstanpy, fbprophet
Running setup.py install for fbprophet ... error
ERROR: Command errored out with exit status 1:
command: /usr/local/bin/python -u -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’; __file__=‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’;f=getattr(tokenize, ‘“’”‘open’“‘”’, open)(__file__);code=f.read().replace(‘“’”‘\r\n’“‘”’, ‘“’”‘\n’“‘”’);f.close();exec(compile(code, __file__, ‘“’”‘exec’“‘”’))' install --record /tmp/pip-record-7n8tvfkb/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.8/fbprophet
cwd: /tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/
Complete output (10 lines):
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/fbprophet
creating build/lib/fbprophet/stan_model
Importing plotly failed. Interactive plots will not work.
INFO:pystan:COMPILING THE C++ CODE FOR MODEL anon_model_dfdaf2b8ece8a02eb11f050ec701c0ec NOW.
error: command ‘gcc’ failed with exit status 1
----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c ‘import sys, setuptools, tokenize; sys.argv[0] = ‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’; __file__=‘“’”‘/tmp/pip-install-l516b8ts/fbprophet_80d5f400081541a2bf6ee26d2785e363/setup.py’“‘”’;f=getattr(tokenize, ‘“’”‘open’“‘”’, open)(__file__);code=f.read().replace(‘“’”‘\r\n’“‘”’, ‘“’”‘\n’“‘”’);f.close();exec(compile(code, __file__, ‘“’”‘exec’“‘”’))' install --record /tmp/pip-record-7n8tvfkb/install-record.txt --single-version-externally-managed --compile --install-headers /usr/local/include/python3.8/fbprophet Check the logs for full command output.
请注意,运行我提供的两个命令总是会产生错误,但它们并不重要。在 fbprophet 解决这些小错误之前升级 setuptools 并安装依赖项。上面显示的错误不同,和gcc有关,而且只发生在某些人身上。
可选的附加问题:
- 我们如何解决它?
- 我们如何防止出现这种不可重现的结果?
- 升级 docker 引擎版本会破坏容器吗?
【问题讨论】:
-
docker 版本的差异可能不会影响这个问题。因为它出现了我的环境,docker 版本 19.03.13,Ubuntu 20.04。
-
如果你在你的 docker 上没有你关心的东西,你应该试试
docker rm -f $(docker ps -aq) && docker system prune --all --volumes。然后在您的 Mac 上再试一次。我确实看到了与我身边的同事相同的行为(带有最新 docker daemon 的 Big Sur) -
这个标签的图片可能发生了变化。你能比较一下你的两个
docker images结果吗? -
@GermanCapuano 与检查ID相同,与检查标签不同,因为标签可以更新为新ID。
-
@GermanCapuano 你的同事什么都不应该做,他的行为是正确的。 你应该运行这些命令
标签: python docker pip facebook-prophet