在具有Alpine Linux的Docker中使用pytz作为非root用户会导致“IOError:[Errno 13] Permission denied”

时间:2016-02-12 04:11:40

标签: python linux docker root

我有以下Dockerfile(它有点剥离,核心元素显示在这里)

FROM alpine:latest

RUN adduser -D some_user_name &&\
    apk add --update alpine-sdk &&\
    apk add --update python-dev &&\
    apk add --update py-dateutil &&\
    apk add --update py-tz

USER some_user_name

CMD ["/bin/sh"]

然后我按照以下方式运行此图像

docker run -d\
           -w /home/some_user_name/python/\
           -v ~/dockerfiles/mount_this/python:/home/some_user_name/python\
           --hostname docker-test --name dock-test\
           alpine/01\
           python executor.py settings:docker-lean

容器立即退出,docker logs显示以下错误

  File "/home/some_user_name/python/executor_handler.py", line 23, in <module>
    import pytz
  File "/usr/lib/python2.7/site-packages/pytz/__init__.py", line 29, in <module>
    from pkg_resources import resource_stream
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3141, in <module>
    @_call_aside
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3127, in _call_aside
    f(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 3154, in _initialize_master_working_set
    working_set = WorkingSet._build_master()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 631, in _build_master
    ws = cls()
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 624, in __init__
    self.add_entry(entry)
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 680, in add_entry
    for dist in find_distributions(entry, True):
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2122, in find_on_path
    path_item, entry, metadata, precedence=DEVELOP_DIST
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2521, in from_location
    py_version=py_version, platform=platform, **kw
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2838, in _reload_version
    md_version = _version_from_file(self._get_metadata(self.PKG_INFO))
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2486, in _version_from_file
    line = next(iter(version_lines), '')
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2654, in _get_metadata
    for line in self.get_metadata_lines(name):
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1623, in get_metadata_lines
    return yield_lines(self.get_metadata(name))
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1615, in get_metadata
    return self._get(self._fn(self.egg_info, name))
  File "/usr/lib/python2.7/site-packages/pkg_resources/__init__.py", line 1726, in _get
    with open(path, 'rb') as stream:
IOError: [Errno 13] Permission denied: '/usr/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg-info/PKG-INFO'

当我通过向root命令添加-u root选项将图像作为docker run运行时,python脚本成功执行,但我真的不想运行容器作为根。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

好的,我添加了

RUN python -c "import pytz;" &&\
    chmod 644 /usr/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg-info/PKG-INFO

到Dockerfile,结果就像这样:

FROM alpine:latest

RUN adduser -D some_user_name &&\
    apk add --update alpine-sdk &&\
    apk add --update python-dev &&\
    apk add --update py-dateutil &&\
    apk add --update py-tz

RUN python -c "import pytz;" &&\
    chmod 644 /usr/lib/python2.7/site-packages/python_dateutil-2.2-py2.7.egg-info/PKG-INFO

USER some_user_name

CMD ["/bin/sh"]

虽然这解决了这个问题,但这可能需要在pytz

中修复
相关问题