给docker容器分配静态ip地址

原文地址,转载请注明出处:http://blog.csdn.net/qq_34021712/article/details/73350738    ©王赛超

前言:

docker容器可以认为就是一台虚拟机,一台服务器,外界想要访问这台服务器,肯定要设置一个ip地址,否则无法访问到该容器。

docker run启动一个container的命令有一个--net的参数用于指定container的网络类型

           docker网络解释参考:https://segmentfault.com/a/1190000000669312

操作过程:

docker默认使用'bridge'来设置container的网络模式(即从与docker0同网段的未使用的IP中取一个作为container的IP)

我们这里使用'none'来实现自己手动配置container的网络


第一步:安装网桥设备 
yum install -y bridge-utils

第二步:给宿主机创建网桥
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
将 以前的ip 网关, dns之类的全部注释掉BOOTPROTO=none 然后最后加上BRIDGE=br-ex    br-ex可以随便起
TYPE=Ethernet
BOOTPROTO=none
#BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno0
UUID=5107e5c5-5e39-4a81-a085-e4ccf9775c4a
ONBOOT=yes
#IPADDR=192.168.0.200
#NETMASK=255.255.255.0
#PREFIX0=24
#GATEWAY=192.168.0.254
#DNS1=114.114.114.114
#DNS2=114.114.114.115
HWADDR=00:0C:29:03:1C:C0
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
BRIDGE=br-ex

第三步:设置物理网卡桥接到网桥

vi /etc/sysconfig/network-scripts/ifcfg-br-ex

TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.0.200
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
PREFIX=24
DNS1=114.114.114.114
DNS2=114.114.114.115
NAME=br-ex
ONBOOT=yes
DEVICE=br-ex
以上修改即为设置IP,设置完毕可以通过命令 service network restart 重启网络

使用 brctl show查看
[root@bogon ~]# brctl show
bridge name     bridge id               STP enabled     interfaces
br-ex           8000.000c29031cc0       no              eno16777736
docker0         8000.024233eb8bc4       no


第四步:启动docker容器并指定网络模式为none
查看镜像
[root@bogon ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    latest              3bee3060bfc8        8 days ago          192.5 MB


注意:使用镜像 启动一个容器 设置网络模式为none
docker run -i -d --net=none --name javadocker -v /usr/local/software/:/mnt/software/ 3bee3060bfc8 /bin/bash

第五步:获取pipework可执行程序

①如果未安装wget使用以下命令安装(安装可以忽略)
yum -y install wget

②如果未安装 zip解压使用以下命令安装(安装可以忽略)
yum install -y unzip zip

③安装pipework
# wget https://github.com/jpetazzo/pipework/archive/master.zip
# unzip master.zip 
# cp pipework-master/pipework  /usr/local/bin/
# chmod +x /usr/local/bin/pipework

如果无法wget获取,点此处下载

第六步:使用pipework给docker容器分配ip

pipework 网桥 容器名称 ip@网关

pipework br-ex javadocker 192.168.0.220/24@192.168.0.254


重启容器后需要再次指定。

第七步:测试ip是否可用

[root@bogon util]# ping 192.168.0.220
PING 192.168.0.220 (192.168.0.220) 56(84) bytes of data.
64 bytes from 192.168.0.220: icmp_seq=1 ttl=64 time=1.43 ms
64 bytes from 192.168.0.220: icmp_seq=2 ttl=64 time=0.208 ms
64 bytes from 192.168.0.220: icmp_seq=3 ttl=64 time=0.755 ms
64 bytes from 192.168.0.220: icmp_seq=4 ttl=64 time=0.124 ms

64 bytes from 192.168.0.220: icmp_seq=5 ttl=64 time=0.961 ms

第八步:进入docker容器,查看ip

docker exec -it 容器id /bin/bash  如:docker exec -it 6a45948a039e /bin/bash

centos7之后 已经改为使用ip addr 查看网络情况 

[root@6a45948a039e /]# ip addr
bash: ip: command not found

如果报bash: ip: command not found 可能是因为镜像最小安装,没有安装iproute

解决方法:yum install iproute iproute-doc

如果想在centos7中使用ipconfig命令,可以安装net-tools

解决方法:yum install net-tools


### 回答1: 使用docker-compose可以通过自定义网络来分配IP地址。在docker-compose文件中定义一个网络,然后为该网络设置一个IP范围,通过这个范围来分配IP地址容器。 首先,在docker-compose.yml文件中定义一个网络,在`networks`部分添加一个新的网络,并为该网络指定一个自定义的名称,例如"my_network"。 ``` version: '2' services: my_service: image: my_image networks: - my_network networks: my_network: ipam: config: - subnet: 192.168.0.0/24 ``` 上面的例子中,我们定义了一个名为"my_network"的网络,并为该网络指定了一个IP范围192.168.0.0/24。 然后,将容器添加到该网络中。在服务的定义中,使用`networks`属性将服务连接到上述定义的网络。 这样,当使用`docker-compose up`启动容器时,容器将被分配一个在IP范围内的IP地址。 需要注意的是,如果要为多个容器分配独立的IP地址,需要确保IP范围的大小足够容纳所有容器所需的地址。 另外,使用自定义网络可以实现多个容器之间的通信,它们可以通过容器名称来相互访问,而无需使用IP地址。 综上所述,通过在docker-compose文件中定义自定义网络并为其设置IP范围,可以实现为容器分配IP地址。 ### 回答2: Docker Compose 允许我们在容器部署时使用自定义网络来分配 IP 地址。下面是关于 Docker Compose 自定义网络分配 IP 地址的一些重要信息: 1. 自定义网络的配置:在 Docker Compose 文件中,我们可以使用 `networks` 关键字定义自定义网络,并为其指定一个名称。例如: ```yaml version: '3' services: app: # 定义自定义网络 networks: - my-network networks: my-network: # 可选配置网络驱动 driver: bridge ``` 2. IP 地址分配方式:Docker Compose 支持三种不同的 IP 地址分配方式,分别是 `default`、`bridge` 和 `host`。默认情况下,Docker Compose 使用 `default` 分配方式。通过在网络配置中指定 `ipam` 选项,我们可以使用其他分配方式。 3. 使用 `default` 分配方式:如果使用默认的 `default` 分配方式,那么 Docker Compose 将自动为容器分配 IP 地址,并且会保持容器名称与 IP 地址之间的关联。例如,我们可以通过在服务定义中使用 `networks` 字段指定网络,并通过使用该网络的容器名称来访问容器。 ```yaml services: app1: networks: - my-network app2: networks: - my-network networks: my-network: ``` 在这种情况下,Docker Compose 将为 `app1` 容器分配一个 IP 地址,并将其映射到容器名称 `my-app1`。 4. 使用其他分配方式:如果我们希望自定义 IP 地址分配方式,可以在网络配置中使用 `ipam` 选项。例如,我们可以指定一个静态 IP 地址供容器使用。 ```yaml services: app: networks: my-network: ipv4_address: 192.168.0.2 networks: my-network: ipam: config: - subnet: 192.168.0.0/16 ``` 在这种情况下,Docker Compose 将为 `app` 容器分配指定的 IP 地址 192.168.0.2。 通过以上的配置,我们可以根据需要在 Docker Compose 中自定义网络并分配 IP 地址。这样可以更好地控制容器之间的通信,并实现特定的网络需求。 ### 回答3: 在Docker Compose中,我们可以使用自定义网络来对容器进行分组和分配IP地址。通过自定义网络,我们可以更好地管理容器之间的通信和连接。 首先,在docker-compose.yml文件中定义一个自定义网络。我们可以使用以下语法来创建一个自定义网络: ```yml networks: <network_name>: driver: <driver_name> ``` 在上面的代码片段中,`<network_name>`是我们给网络取的名称,`<driver_name>`是网络使用的驱动程序。 例如,我们可以创建一个名为`my_network`的自定义网络,并使用默认的`bridge`驱动程序,只需在docker-compose.yml文件中添加以下代码: ```yml networks: my_network: driver: bridge ``` 一旦我们定义了一个自定义网络,我们可以将容器连接到这个网络,并为它们分配IP地址。 要将容器连接到自定义网络,我们可以使用以下代码: ```yml services: <service_name>: networks: - <network_name> ``` 在上面的代码片段中,`<service_name>`是我们要将容器连接到的服务名称,`<network_name>`是我们之前定义的自定义网络名称。 例如,如果我们要将一个名为`web`的服务连接到`my_network`网络,我们可以在docker-compose.yml文件中添加以下代码: ```yml services: web: networks: - my_network ``` 最后,我们可以为连接到自定义网络的容器分配IP地址Docker将自动为连接到网络的容器分配IP地址。我们可以使用以下代码来查看容器IP地址: ```bash docker network inspect <network_name> ``` 在上面的命令中,`<network_name>`是我们之前定义的自定义网络名称。 总之,使用Docker Compose的自定义网络,我们可以轻松地进行容器的分组和分配IP地址。通过定义自定义网络并连接容器,我们可以实现灵活的容器通信和连接管理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值