我正在centos 7上构建docker haproxy 1.8自定义镜像。我想为前端打开端口80,但是每当IO启动容器时,它都会抱怨“无法在端口80上绑定(bind)套接字” ,但是可以绑定(bind)在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 run命令是:
 docker run -d --name haproxy --privileged -p 80:80 haproxy:80

最佳答案

在启动haproxy之前,请使用USER haproxy,这意味着您将以普通用户身份运行该应用程序。

但是在linux中,普通用户只能打开1024〜65535的端口,只有root可以打开1024以下的端口,它们称为Priviliged ports:



实际上,您可以看到haproxy official image,这是它的dockerfile,可以使用root来启动服务。

并且,您可以在haproxy.cfg中指定用户是否确实需要它,即this

global
    daemon
    maxconn 60000
    user haproxy

关于docker - 端口80上的Docker Centos7 + haproxy1.8,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57264139/

10-16 10:07