我试图不在Docker容器中使用root,但是Gunicorn没有启动。
FROM python:2.7
RUN apt update && \
apt install -y python-pip gcc python-dev libpq-dev && \
pip install --upgrade pip && \
pip install gunicorn && \
pip install eventlet && \
pip install psycopg2
RUN addgroup [username_group] && \
useradd -rm -d /home/[home] -s /bin/bash -g [username_group] -G sudo -u 1000 [username] # uid taken from host system
# USER [username] # if this line is un-commented it doesn't work.
COPY ./web2py /home/[home]/web2py
WORKDIR /home/[home]/web2py
EXPOSE 80 443
CMD gunicorn -b 0.0.0.0:80 -w 3 wsgihandler
这是输出
[container] | [2019-01-28 20:21:58 +0000] [6] [INFO] Starting gunicorn 19.9.0
[container] | [2019-01-28 20:21:58 +0000] [6] [ERROR] Retrying in 1 second.
[container] | [2019-01-28 20:21:59 +0000] [6] [ERROR] Retrying in 1 second.
[container] | [2019-01-28 20:22:00 +0000] [6] [ERROR] Retrying in 1 second.
[container] | [2019-01-28 20:22:01 +0000] [6] [ERROR] Retrying in 1 second.
[container] | [2019-01-28 20:22:02 +0000] [6] [ERROR] Retrying in 1 second.
[container] | [2019-01-28 20:22:03 +0000] [6] [ERROR] Can't connect to ('0.0.0.0', 80)
使用与主机相同的UID解决了我在卷上遇到的权限问题。但是由于我不能在Dockerfile中使用sudo,我不知道如何在不使用root离开容器的情况下让服务器运行。
1条答案
按热度按时间jmp7cifd1#
在将1.23升级到1.24后,我在运行于EKS上的Kubernetes集群中收到此错误。
问题是
dockershim
和containerd
之间的迁移,其中dockershim
允许在端口80上绑定,而containerd
不允许,除非指定了其他标志(--sysctl net.ipv4.ip_unprivileged_port_start=0
)。(类似于this issue。)根据
containerd
团队(在这里)的说法,bug是dockershim
不应该允许绑定到那个端口,而首先没有标记。在我的例子中,我通过将端口更改为非80端口来解决问题,并让我们的入口控制器处理到新端口的路由。我猜您可以设置上述标志(而不更新所使用的端口)并通过这种方式解决问题。