背景: 在 CentOS
上用 Docker
部署遇到一些坑。
系统为 CentOS 7
, 升级了 pip(19)
后, 直接敲 pip install docker
安装 Docker
。结果:
ImportError: cannot import name 'main'
上网搜索了大部分解决办法都不行,可能环境和版本都有差异吧。
解决办法
我的 macOS
的 pip
是没问题的啊,于是:more /usr/local/lib/python3.7/site-packages/pip/__main__.py
from __future__ import absolute_import
import os
import sys
# If we are running from a wheel, add the wheel to sys.path
# This allows the usage python pip-*.whl/pip install pip-*.whl
if __package__ == '':
# __file__ is pip-*.whl/pip/__main__.py
# first dirname call strips of '/__main__.py', second strips off '/pip'
# Resulting path is the name of the wheel itself
# Add that to sys.path so we can import pip
path = os.path.dirname(os.path.dirname(__file__))
sys.path.insert(0, path)
from pip._internal import main as _main # isort:skip # noqa
if __name__ == '__main__':
sys.exit(_main())
答案很明显了。
然后开心的装了 docker(Docker version 1.13.1)
和 docker-compose(docker-compose version 1.24.1)
后,准备 docker-compose up -d
然后又出问题:
Creating wechat_auto_reply_web_1 ... done
Attaching to wechat_auto_reply_web_1
web_1 | python: can't open file './auto_reply.py': [Errno 13] Permission denied
wechat_auto_reply_web_1 exited with code 2
在加了权限和尝试各种方法后,解决办法
-
SELinux
的原因,执行setenforce 0
就可以了(原因可以去了解一下) -
docker
添加--privileged
参数。我采取了此办法,在docker-compose.yml
添加privileged: true
参考于: https://nanxiao.me/en/selinux-cause-permission-denied-issue-in-using-docker/
以上,问题都解决了。