为什么在 Alpine 上 运行 uWSGI 时 --uid 选项会导致权限被拒绝错误?

Why does --uid option leads to permission denied error when running uWSGI on Alipne?

我在基于 Alpine:3.10 的容器中有一个简单的 Flask 应用程序,我想 运行 它与 uWSGI 一起使用。事情是,当我 运行 它指定 --uid 参数时:

CMD [ "uwsgi", "--socket", "0.0.0.0:80", \
               "--uid", "uwsgi", \
               "--plugins", "python3", \
               "--protocol", "http", \
               "--module", "owo.app:app", \
               "-p", "4", \
               "--enable-threads"]

它记录权限被拒绝错误并以代码 1 退出:

ind(): Permission denied [core/socket.c line 769]

但是如果我评论 --uid 参数,它会警告我我 运行 它是根用户(这很糟糕),但是 运行很好。我究竟做错了什么?

只有 root 可以绑定到小于 1024 的端口。您应该将 uwsgi 命令行更改为 运行,而不是端口 80,例如:

CMD [ "uwsgi", "--socket", "0.0.0.0:8080", \
               "--uid", "uwsgi", \
               "--plugins", "python3", \
               "--protocol", "http", \
               "--module", "owo.app:app", \
               "-p", "4", \
               "--enable-threads"]

您 运行 在容器内的哪个端口并不重要,因为当您 docker run 您的容器 (docker run -p 80:8080 ... ).