为节约服务器资源方便服务器迁移,可以将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