端口80上的Docker Centos7 + haproxy1.8

时间:2019-07-30 04:05:27

标签: docker

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

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:location/location.dart';

StreamSubscription<QuerySnapshot> subscription;
List<DocumentSnapshot> wallpapersList;


...


class MapPageState extends State<MapPage> {

  final CollectionReference collectionReference =
  Firestore.instance.collection("users");



  @override
  void initState() {
    // TODO: implement initState
    super.initState();

    print(wallpapersList);

    subscription = collectionReference.snapshots().listen((datasnapshot) {
      setState(() {
        wallpapersList = datasnapshot.documents;

      });
    });
}

...

我的docker run命令是:

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"] 

1 个答案:

答案 0 :(得分:1)

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

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

  

特权端口

     

低于1024的TCP / IP端口号是特殊的,因为不允许普通用户在其上运行服务器。这是一项安全措施,因为如果您在这些端口之一上连接到服务,则可以确定您拥有真实的东西,而不是某些黑客为您提供的伪造品。   W3服务器的常规端口号是端口80。此号码已由Internet分配号码授权机构IANA分配给WWW。

     

当您通过非特权帐户运行服务器作为测试时,通常会在其他端口(例如2784、5000、8001或8080)上对其进行测试。

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

此外,您可以在haproxy.cfg中指定是否确实需要用户,请参考this

global
    daemon
    maxconn 60000
    user haproxy