Docker Centos7+;端口80上的haproxy1.8

Docker Centos7+;端口80上的haproxy1.8,docker,Docker,我正在centos 7上构建docker haproxy 1.8自定义图像。我想为前端打开端口80,但每当IO启动容器时,它都会抱怨“无法绑定端口80上的套接字”,但它可以绑定到8080和其他不常用的端口。我相信这与内核参数有关,但我不能在dockerfile中运行sysctl,它返回“只读”文件系统。docker run有--sysctl命令行,但我相信它没有任何效果。 我的Dockerfile如下所示: FROM centos:7 MAINTAINER "SAGAR" ADD ["http:

我正在centos 7上构建docker haproxy 1.8自定义图像。我想为前端打开端口80,但每当IO启动容器时,它都会抱怨“无法绑定端口80上的套接字”,但它可以绑定到8080和其他不常用的端口。我相信这与内核参数有关,但我不能在dockerfile中运行sysctl,它返回“只读”文件系统。docker run有--sysctl命令行,但我相信它没有任何效果。 我的Dockerfile如下所示:

FROM centos:7
MAINTAINER "SAGAR"
ADD ["http://www.haproxy.org/download/1.8/src/haproxy-1.8.20.tar.gz", "/tmp/"]
RUN mkdir /etc/haproxy
COPY ["haproxy.cfg", "/etc/haproxy/"]
RUN yum -y update && \
yum -y install wget tar gcc pcre-static pcre-devel make perl zlib-devel openssl-devel systemd-devel make && \
groupadd -r haproxy && \
useradd -g haproxy -d /etc/haproxy -s /sbin/nologin  -c "Haproxy User" haproxy && \
chown -R haproxy:haproxy /etc/haproxy && \
chmod -R 774 /etc/haproxy && \
cd /tmp/ && \
tar -xvzf /tmp/haproxy-1.8.20.tar.gz && \
cd /tmp/haproxy-1.8.20 && \
make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_CRYPT_H=1 USE_LIBCRYPT=1 USE_LINUX_TPROXY=1 USE_SYSTEMD=1 USE_THREAD=1 && \
make install && \
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy && \
yum clean all; 
EXPOSE 80 443 13888 9000
USER haproxy 
CMD ["/usr/sbin/haproxy", "-W", "-f", "/etc/haproxy/haproxy.cfg"] 
我的docker运行命令是:

 docker run -d --name haproxy --privileged -p 80:80 haproxy:80

在启动haproxy之前使用
USER haproxy
,这意味着您正在使用普通用户运行应用程序

但在linux中,普通用户只需在1024~65535之间打开端口,root用户只需在1024以下打开端口,称为:

专用端口

低于1024的TCP/IP端口号是特殊的,因为不允许普通用户在其上运行服务器。这是一个安全问题,如果你连接到其中一个端口上的服务,你可以相当肯定你拥有的是真品,而不是某个黑客为你制造的假货。 W3服务器的正常端口号为端口80。该号码已由互联网分配号码管理局IANA分配给WWW

当您从非私有帐户以测试方式运行服务器时,通常会在其他端口(如2784、5000、8001或8080)上对其进行测试

事实上,您可以看到,这是它的,他们可以使用root启动服务

并且,如果确实需要,您可以在
haproxy.cfg
中指定用户,参考


如果可能,您的主机上已经有一个应用程序在使用80?@atline不可能。这是我一个人做的。监听端口只有22个;错误明确表示容器日志上无法绑定套接字
[ALERT]209/235335(1):启动前端http:cannot bind socket[0.0.0.0:80]
,对于tat,这意味着它在容器内部。我不知道我怎么会错过这一点。我应该说谢谢你提供的信息。顺便说一句,haproxy.cfg中有haproxy用户,一切正常。我还有其他Docker与root用户一起工作。
global
    daemon
    maxconn 60000
    user haproxy