我正在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"]
答案 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