【问题标题】:Docker run: uwsgi gives permission deniedDocker 运行:uwsgi 授予权限被拒绝
【发布时间】:2021-10-18 20:30:12
【问题描述】:

这太奇怪了……我有一个运行 Web 应用程序的 docker 映像。当我运行它时,容器中什么都没有显示……没有错误。 docker ps -a 下什么都没有。

我运行 docker events& 又试了一次,它报错 1... 这显然是一个应用程序错误,好的。

所以,我重新运行为:

docker run -it --entrypoint /bin/bash -p 80:80 --name NAME -d 名称:最新的-s

然后运行runall.sh中的每一项

前三个项目给了一个权限被拒绝:

uwsgi --http-socket 127.0.0.1:3009 --file /var/www/cgi-bin/tireorder/main.wsgi --processes 1 --uid root --enable-threads -b 32768 --daemonize /var/www/cgi-bin/tireorder/tireorder.log --pidfile /var/www/cgi-bin/tireorder/tireorder.pid

查了一下,貌似是用户权限,但是所有目录和文件都是root权限。

真正奇怪的是,我让它在 windows 和 mint linux 虚拟机中运行……但在生产中(RHEL)或我的 linode 虚拟机(Centos 8、Debian 10、Ubuntu 21)上提供了相同的权限拒绝!?

这是 docker 文件。

FROM lovato/python-2.6.6:latest

WORKDIR /

COPY trotta.tar.gz /

COPY runall.sh /

RUN chmod ugo+x runall.sh

RUN apt-get update

RUN apt-get install haproxy python python-pip python-dev nginx python-paste python-pastewebkit python-babel -y

RUN ["tar", "-xvzf", "trotta.tar.gz"]

RUN ["rm", "/etc/nginx/sites-enabled/default"]

RUN ["cp", "-R", "/usr/lib/python2.6/site-packages/Muntjac-1.1.2-py2.6.egg/muntjac", "/usr/lib/python2.7/dist-packages/"]

COPY uwsgi /usr/local/bin/

COPY /etc/default.conf /etc/nginx/conf.d/

COPY /etc/tireorder.conf /etc/

CMD ./runall.sh

这里是runall.sh:

uwsgi --http-socket 127.0.0.1:3009 --file /var/www/cgi-bin/tireorder/main.wsgi --processes 1 --uid root --enable-threads -b 32768 --daemonize /var/www/cgi-bin/tireorder/tireorder.log --pidfile /var/www/cgi-bin/tireorder/tireorder.pid
uwsgi --http-socket 127.0.0.1:3310 --file /var/www/cgi-bin/tireorder2/main.wsgi --processes 1 --uid root --enable-threads -b 32768 --daemonize /var/www/cgi-bin/tireorder2/tireorder.log --pidfile /var/www/cgi-bin/tireorder2/tireorder.pid --chdir /var/www/cgi-bin/tireorder2
uwsgi --http-socket 127.0.0.1:3610 --file /var/www/cgi-bin/tireorder3/main.wsgi --processes 1 --uid root --enable-threads -b 32768 --daemonize /var/www/cgi-bin/tireorder3/tireorder.log --pidfile /var/www/cgi-bin/tireorder3/tireorder.pid --chdir /var/www/cgi-bin/tireorder3
service nginx start
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid
tail -f /var/www/cgi-bin/tireorder/tireorder.log &
tail -f /var/www/cgi-bin/tireorder2/tireorder.log &
tail -f /var/www/cgi-bin/tireorder3/tireorder.log

【问题讨论】:

  • edit 发帖并包含 dockerfile。 --- 在生产系统上,你是否激活了 SELinux?
  • 请同时包含runall.sh-script。 --- 据我所知,您复制了uwsgi 二进制文件,但不使其可执行。假设它是可执行的,接下来的问题是: - 在 dockerfile 中设置了什么用户? - /var/www/cgi-bin/tireorder的内容是什么,这个目录的权限是什么?
  • 更新了 docker 文件和 runall。仅供参考...我对 docker 很陌生。
  • 我以 root 身份构建所有内容。
  • 这里是构建:docker build --no-cache -t trotta:latest -f Dockerfile。

标签: docker permissions wsgi


【解决方案1】:

每阿肖克: 在 dockerfile 中的 CMD 命令上方添加 RUN chmod -R 775

这在应用文件夹和 uwsgi 时解决了它。

【讨论】:

    猜你喜欢
    • 2011-10-17
    • 2017-11-30
    • 2011-08-28
    • 2019-03-10
    • 2017-05-14
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多