为节约服务器资源方便服务器迁移,可以将Open×××跑在Docker容器中,Open×××在容器中有相比其他有些特殊,主要有以下几点:
1.ip包转发问题
2.iptables在容器中的权限问题
3.容器对网卡设备的权限问题
环境:
CentOS 7.2 x86_64
Docker-1.13.1
selinux已关闭
1.ip包转发
修改/usr/lib/systemd/system/docker.service文件
ExecStart=/usr/bin/dockerd --ip-forward=true --iptables=true
增加红色部分,打开ip-forward及iptables
2.在启动容器时增加
docker run --cap-add NET_ADMIN --cap-add NET_RAW --device=/dev/net/tun -d -p 1194:1194/udp open***
使得容器有操作网卡的权限
这样就可以在Docker中跑Open×××
dockerfile
FROM centosRUN rm -rf /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && yum -y install python-setuptools && easy_install pip && pip install supervisorRUN yum -y install gcc make autoconf openssl-devel pam-devel lzo-devel iptables-servicesCOPY open***-2.3.14.tar.gz .RUN tar zxf open***-2.3.14.tar.gz && cd open***-2.3.14 && ./configure --prefix=/usr/local/open***2.3.14 && make && make install && rm -rf ../open***-2.3.14 && rm -rf ../open***-2.3.14.tar.gzRUN mkdir /usr/local/open***2.3.14/logsCOPY conf /usr/local/open***2.3.14/confCOPY iptables.sh /iptables.shCOPY supervisord.conf /etc/supervisord.confCMD ["/usr/bin/supervisord"]
cat iptables.sh
#!/bin/bashiptables -Fiptables -Xiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPTiptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPTiptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A INPUT -p udp --dport 1194 -j ACCEPTiptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
cat supervisord.conf
[supervisord]nodaemon=true[program:iptables]command=/iptables.sh[program:open***]command=/usr/local/open***2.3.14/sbin/open*** --config /usr/local/open***2.3.14/conf/server.conf --daemon