【问题标题】:Using nsenter to access docker network that has no running containers attached使用 nsenter 访问没有附加运行容器的 docker 网络
【发布时间】:2018-11-15 13:25:30
【问题描述】:

我阅读的所有内容都使用使用该网络的容器的 PID。不幸的是,容器由于我认为是网络问题而死亡。我想进入网络命名空间并运行命令,而不是在该网络上运行不同的容器。

我的 /var/run/docker/netns/ 文件夹是空的。但是网络是一个桥接网络,出现在docker network ls

【问题讨论】:

    标签: docker networking namespaces nsenter


    【解决方案1】:

    当容器启动时,它会获得自己的网络命名空间,除非它以--net=none--net=host 启动。一旦容器停止,这个命名空间就会被删除。因此,一旦它不运行,您将无法调试与该容器网络相关的任何内容。

    您需要检查容器日志以了解容器退出的原因。

    这里有一些相关的示例命令:

    pid=`docker inspect -f '{{.State.Pid}}' $container_id`
    
    mkdir -p /var/run/netns
    rm -f /var/run/netns/$container_id
    ln -sv /proc/$pid/ns/net /var/run/netns/$container_id
    nsenter -m -t `pidof dockerd` nsenter --net=/var/run/docker/netns/4-4ef4272ac1 ip link
    

    【讨论】:

    • 感谢您的评论。我了解容器运行时如何执行此操作。所以也许我是误会了。在容器启动之前不会创建命名空间?当我执行docker network create foo 时,实际上做了什么?如果容器正在运行,我只能进入使用foo 的命名空间?
    • docker network create 正在主机上创建网桥(使用ip addr 检查。当容器启动时,它使用veth 连接到网桥。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2020-12-17
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    相关资源
    最近更新 更多