无法启动/停止/重新启动docker容器内的服务

时间:2017-11-23 10:32:54

标签: docker containers centos7

据我所知,与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

2 个答案:

答案 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中,因此在容器内摆弄它几乎没有任何意义。