使用ip命令配置docker容器网络

启动一个名为test1的docker容器

[[email protected] ~]# docker run -itd --name test1 busybox /bin/sh
d0a13f295d7ac256aa6ba63ab5af0d4ba2ffcb7c7ae455b9e997462d363ff6cb
[[email protected] ~]# ip netns list
ns2
ns1 (id: 0)

使用ip netns命令创建了两个network namespace(ns1和ns2)后会在/var/run/netns目录下看到ns1和ns2两项

[[email protected] ~]# ls -la /var/run/netns
总用量 0
drwxr-xr-x  2 root root  80 12月 28 17:20 .
drwxr-xr-x 27 root root 820 12月 28 17:20 ..
-r--r--r--  1 root root   0 12月 28 17:20 ns1
-r--r--r--  1 root root   0 12月 28 17:20 ns2

docker创建的network namespace并不在此目录下创建任何项,linux下的每个进程都会属于一个特定的network namespace,来看一下不同network namespace环境中/proc/$PID/ns目录下有何区别

/proc/self链接到当前正在运行的进程

主机默认的network namespace中

[[email protected] ~]# ls -la /proc/self/ns/
总用量 0
dr-x--x--x 2 root root 0 12月 28 17:51 .
dr-xr-xr-x 9 root root 0 12月 28 17:51 ..
lrwxrwxrwx 1 root root 0 12月 28 17:51 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 12月 28 17:51 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 12月 28 17:51 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 12月 28 17:51 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 12月 28 17:51 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 12月 28 17:51 uts -> uts:[4026531838]

在ns1中

[[email protected] ~]# ip netns exec ns1 ls -la /proc/self/ns
总用量 0
dr-x--x--x 2 root root 0 12月 28 17:52 .
dr-xr-xr-x 9 root root 0 12月 28 17:52 ..
lrwxrwxrwx 1 root root 0 12月 28 17:52 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 12月 28 17:52 mnt -> mnt:[4026532688]
lrwxrwxrwx 1 root root 0 12月 28 17:52 net -> net:[4026532503]
lrwxrwxrwx 1 root root 0 12月 28 17:52 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 12月 28 17:52 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 12月 28 17:52 uts -> uts:[4026531838]
[[email protected] ~]# 

在ns2中

[[email protected] ~]# ip netns exec ns2 ls -la /proc/self/ns
总用量 0
dr-x--x--x 2 root root 0 12月 28 17:53 .
dr-xr-xr-x 9 root root 0 12月 28 17:53 ..
lrwxrwxrwx 1 root root 0 12月 28 17:53 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 12月 28 17:53 mnt -> mnt:[4026532688]
lrwxrwxrwx 1 root root 0 12月 28 17:53 net -> net:[4026532567]
lrwxrwxrwx 1 root root 0 12月 28 17:53 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 12月 28 17:53 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 12月 28 17:53 uts -> uts:[4026531838]

只要将代表docker创建的network namespace文件的链接到/var/run/netns目录下,就可以使用ip netns命令进行操作了

[[email protected] ~]# docker inspect --format ‘{{ .State.Pid }}‘ test1
14450

若不存在目录/var/run/netns,则创建

[[email protected] ~]# mkdir /var/run/netns/

在/var/run/netns/下创建软链接,指向test1容器的network namespace

[[email protected] ~]# docker inspect --format ‘{{ .State.Pid }}‘ test1
14450
[[email protected] ~]# ln -s /proc/14450/ns/net /var/run/netns/test1

测试是否成功

[[email protected] ~]# ip netns list
test1 (id: 1)
ns2
ns1 (id: 0)
[[email protected] ~]# ip netns exec test1 ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
6: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0

完成以上配置后,就可以自行配置docker的网络环境了,除了ip netns命令外,还有一些工具可以进入linux namespace。

原文地址:https://www.cnblogs.com/liujunjun/p/12112881.html

时间: 2024-10-07 23:12:25

使用ip命令配置docker容器网络的相关文章

使用pipework配置docker容器固定ip

首先讲一下docker的网络模式: 我们使用docker run创建容器时,可以使用--net选项指定容器的网络模式,docker一共有4中网络模式: 1:bridge模式,--net=bridge(默认). 这是dokcer网络的默认设置.安装完docker,系统会自动添加一个供docker使用的网桥docker0,我们创建一个新的容器时,容器通过DHCP获取一个与docker0同网段的IP地址.并默认连接到docker0网桥,以此实现容器与宿主机的网络互通.如下: 2:host模式,--ne

docker 容器网络绑定端口部署

docker网络基础 一. 1. 默认情况下容器可以建立到外网网络的链接但是外网网络无法连接到容器 docker允许通过外部访问容器或容器互联的方式来提供网络服务 外部访问容器可以在容器中运行网络应用可以通过-p 或 -P参数来指定端口隐射. -P:默认指定端口  -p自定义指定端口 2.dicker容器启动时会在宿主机上创建一个名为docker0的虚拟网络接口docker启动       一个容器时会根据docker0的网段划分容器的ip.每个docker容器是docker0的网关从     

两台主机间docker容器网络互通

服务器1: 网络172.30.0.0/16 服务器2: 网络172.31.0.0/16 服务器1和服务器2上的docker容器网络之间是无法互通的,如果需要互通,需要做以下配置: 服务器1上执行: iptables -I DOCKER-USER -i br-88bd505e153f -o eth0 -j ACCEPT iptables -I DOCKER-USER -i eth0 -o br-88bd505e153f -j ACCEPT br-88bd505e153f是服务器1上docker的网

虚拟化技术—docker容器—网络模式

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.这里先介绍Docker自身的4种网络工作方式. 1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: § host模式,使用--net=host指定

pipework配置docker网桥网络

在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipework工具来实现这一需求 1.安装pipework2.宿主机配置桥接网络(可以省略)3.给容器添加桥接地址 实验环境:宿主机:10.207.0.99/24 网关:10.207.0.0.1容器test:10.207.0.236/24 1.安装pipework[[email protected] ~]g

docker 容器网络篇

在安装Docker的时候,系统会自动创建一个docker0的设备,默认ip地址为172.17.0.1,他既作为宿主机的网卡使用,也作为docker容器的交换机来使用.Docker的默认网段为:172.16.0.0/16.可以使用如下命令查看docker桥设备: [root@localhost ~]# docker network inspect bridge [ { "Name": "bridge", "Id": "f9e359b819

初识Docker容器网络模式

Docker容器4种网络模式基于docker run创建docker容器时,可使用--net选项指定容器网络模式,Docker网络模式有:1).None模式不为容器配置任何网络.--network none # docker run -it --network none busybox:latest Unable to find image 'busybox:latest' locally latest: Pulling from library/busybox ee153a04d683: Pu

第五篇:Centos7上配置docker容器ssh登录

1.查看httpd容器是否运行2.启动httpd容器3.默认情况下,我们只能在宿主机上通过如下方式连接容器说明:这是在宿主机连接容器直接有效的方法 我们能够通过容器的IP地址连接容器呢?需要了解Docker daemon的运行机制 Docker daemon是一个docker服务端组件,它是以Linux后台服务进程运行 Docker daemon程序运行在 Docker host 上,负责创建.运行.监控容器,构建.存储镜像 默认配置下,Docker daemon 只能响应来自本地 Host 的

Kubernetes &amp; Docker 容器网络终极之战

与 Docker 默认的网络模型不同,Kubernetes 形成了一套自己的网络模型,该网络模型更加适应传统的网络模式,应用能够平滑的从非容器环境迁移到 Kubernetes 环境中. 自从 Docker 容器出现,容器的网络通信一直是众人关注的焦点,而容器的网络方案又可以分为两大部分: 单主机的容器间通信: 跨主机的容器间通信. 一.单主机 Docker 网络通信 利用 Net Namespace 可以为 Docker 容器创建隔离的网络环境,容器具有完全独立的网络栈,与宿主机隔离.也可以使