据我所知,与VM不同,容器没有自己的内核。为了使用服务,我必须与容器进行系统集成。
我主要关注的是在容器中应用NAT规则,然后重新启动网络以使它们生效。
按照 - https://github.com/docker-library/docs/tree/master/centos#systemd-integration
中的步骤操作shrey67 / gateway-systemd与local / c7-systemd
相同使用必要的权限启动docker容器。
docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro --cpus="0.33" -
-network=d1 --cap-add=NET_ADMIN --cap-add=NET_RAW --hostname Temp
--name Temp shrey67/gateway-systemd
应用一些NAT规则
[root@Temp /]# iptables -A FORWARD -i eth2 -o eth0 -m state --
state RELATED,ESTABLISHED -j ACCEPT
[root@Temp /]# iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT
[root@Temp /]# iptables -A FORWARD -i eth2 -o eth1 -m state --
state RELATED,ESTABLISHED -j ACCEPT
[root@Temp /]# iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT
[root@Temp /]# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -i eth2 -o eth0 -m state --state RELATED,ESTABLISHED -j
ACCEPT
-A FORWARD -i eth0 -o eth2 -j ACCEPT
-A FORWARD -i eth2 -o eth1 -m state --state RELATED,ESTABLISHED -j
ACCEPT
-A FORWARD -i eth1 -o eth2 -j ACCEPT
[root@Temp /]# service iptables start
Redirecting to /bin/systemctl start iptables.service
Failed to get D-Bus connection: Operation not permitted
我可以保存NAT规则。
[root@Temp /]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@emp /]# service iptables restart
Redirecting to /bin/systemctl restart iptables.service
Failed to get D-Bus connection: Operation not permitted
[root@Temp /]# systemctl restart iptables.service
Failed to get D-Bus connection: Operation not permitted
主机是CentOS 7
答案 0 :(得分:0)
我解决了这个问题。按照这两个步骤后,我可以启动/停止/重启服务。
步骤1 - 将systemd与容器集成。点击此链接。
https://github.com/docker-
library/docs/tree/master/centos#systemd-integration
步骤2 - 使用特权标志启动容器。
docker run -it -v /sys/fs/cgroup:/sys/fs/cgroup:ro --privileged
ubuntu
答案 1 :(得分:0)
仅仅是为了记录,你可以通过使用https://github.com/gdraheim/docker-systemctl-replacement;)来避免令人尊敬的“无法获得D-Bus连接:操作不被允许”......但我不确定这是否会很好足以启动iptables。那是因为iptables在内核AFAIK中,因此在容器内摆弄它几乎没有任何意义。