Docker为网络bridge模式指定容器ip的方法

前言

众所周知bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上。下面来看看Docker为网络bridge模式指定容器ip的方法。

实现方法

如果只是简单创建一个bridge模式的网络是无法给容器指定ip的

[root@vultrvpn conf.d]# docker network create --driver bridge wordpress_net
ad1ff3d972e8bfe6d992a8403a98f46784aa75d5514adbf35ee6ae4528513be7
[root@vultrvpn conf.d]# docker network ls
NETWORK ID   NAME    DRIVER    SCOPE
38fab5c74b87  bridge    bridge    local
f0cf94dd0c5e  host    host    local
465a31c55aa1  none    null    local
ad1ff3d972e8  wordpress_net  bridge    local 

已创建一个wordpress_net的网络,在这个网络模块上创建一个容器,并指定ip

[root@vultrvpn conf.d]# docker run -d --name db_mysql -m 220m --memory-swap 220m -v /data/docker_project/db_mysql/data:/var/lib/mysql -v /data/docker_project/db_mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=qwe123 --network=wordpress_net --ip=172.18.0.2 mysql:5.7
da497e56bd4b0f3434dd4f81534096574d167354dc508b657ceb390ba8e63771
docker: Error response from daemon: User specified IP address is supported only when connecting to networks with user configured subnets.

提示了一个错误,若要配置ip,则需要给这个网络指定一个subnet。所以重新搞一个网络。

docker network create --driver bridge --subnet 172.25.0.0/16 wordpress_net

[root@vultrvpn conf.d]# docker network inspect wordpress_net
[
 {
  "Name": "wordpress_net",
  "Id": "925e64493df9b674ef9bdadaae380c8a335aa6353e48b447cb5d910df19c3a3e",
  "Scope": "local",
  "Driver": "bridge",
  "EnableIPv6": false,
  "IPAM": {
   "Driver": "default",
   "Options": {},
   "Config": [
    {
     "Subnet": "172.25.0.0/16"
    }
   ]
  },
  "Internal": false,
  "Containers": {},
  "Options": {},
  "Labels": {}
 }
]

在给容器指定一个ip

[root@vultrvpn conf.d]# docker run -d --name my_vpn -m 100m --memory-swap 100m -e WORDPRESS_DB_HOST=172.25.0.2 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=qwe123 -e WORDPRESS_DB_NAME=myvpn -p 8001:80 --network=wordpress_net wordpress:4.6
096518d84419476f71647a8c70c91c3f336ef8772af50672b88a9c1fd7b3a719
[root@vultrvpn conf.d]# docker ps -a
CONTAINER ID  IMAGE     COMMAND     CREATED    STATUS      PORTS     NAMES
096518d84419  wordpress:4.6   "/entrypoint.sh apach" 47 seconds ago  Up 47 seconds    0.0.0.0:8001->80/tcp my_vpn
6d23ed99db20  wordpress:4.6   "/entrypoint.sh apach" About a minute ago Up About a minute   0.0.0.0:8000->80/tcp my_wordpress
ade42edf5a93  mysql:5.7    "docker-entrypoint.sh" 3 minutes ago  Up 3 minutes    3306/tcp    db_mysql

正常创建

查看网卡信息

[root@vultrvpn conf.d]# docker network inspect wordpress_net
[
 {
  "Name": "wordpress_net",
  "Id": "925e64493df9b674ef9bdadaae380c8a335aa6353e48b447cb5d910df19c3a3e",
  "Scope": "local",
  "Driver": "bridge",
  "EnableIPv6": false,
  "IPAM": {
   "Driver": "default",
   "Options": {},
   "Config": [
    {
     "Subnet": "172.25.0.0/16"
    }
   ]
  },
  "Internal": false,
  "Containers": {
   "096518d84419476f71647a8c70c91c3f336ef8772af50672b88a9c1fd7b3a719": {
    "Name": "my_vpn",
    "EndpointID": "e44636c2b3a49d4aedaad68cd6ca17aea3a9fe4f71afecb27219a6412701536a",
    "MacAddress": "02:42:ac:19:00:04",
    "IPv4Address": "172.25.0.4/16",
    "IPv6Address": ""
   },
   "6d23ed99db20f17d99dd5dcf6cc65f5ced8cb936917dee044914cf278179150c": {
    "Name": "my_wordpress",
    "EndpointID": "3c765d5953428c1d66be584eb0d34b58f6eee3f598e3a37263d54d77e2b87263",
    "MacAddress": "02:42:ac:19:00:03",
    "IPv4Address": "172.25.0.3/16",
    "IPv6Address": ""
   },
   "ade42edf5a934b02f7bb741bd5a45a282a50d3a49e9f1866579e8f93fef22a0e": {
    "Name": "db_mysql",
    "EndpointID": "2322bfb9da72b3b6db68d59cea97172e66b960ca5b782bd2fa7d09f9c93f0288",
    "MacAddress": "02:42:ac:19:00:02",
    "IPv4Address": "172.25.0.2/16",
    "IPv6Address": ""
   }
  },
  "Options": {},
  "Labels": {}
 }
]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家能有所帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • Docker网络代理设置详解

    背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可行的.然而,docker命令却使用不了这些代理. 比如docker pull时需要从外网下载镜像,就会出现如下错误: $ docker pull hello-world Unable to find image 'hello-world:latest' locally Pulling reposit

  • Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法

    Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法 发生现象: ubuntu15下,安装完Docker后,运行docker images 报错Cannot connect to the Docker daemon. Is the docker daemon running on this host? 如下图 图 原因分析: 目前我遇到这个问题是两个原因造成的,一个

  • Docker网络之单host网络及使用案例

    前言 前面总结了Docker基础以及Docker存储相关知识,今天来总结一下Docker单主机网络的相关知识.毋庸置疑,网络绝对是任何系统的核心,他在Docker中也占有重要的作用. 一.Docker默认网络 在新安装docker的主机上执行 docker network ls 便能看到docker默认安装的所有网络,分别是none网络.host网络和bridge网络. 1.1 none 网络 none网络就是什么都没有的网络.挂在这个网络下的容器除了lo,没有其他任何网卡.容器run时,可以通

  • Docker 网络模式(四种)详细介绍

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

  • Docker为网络bridge模式指定容器ip的方法

    前言 众所周知bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace.设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上.下面来看看Docker为网络bridge模式指定容器ip的方法. 实现方法 如果只是简单创建一个bridge模式的网络是无法给容器指定ip的 [root@vultrvpn conf.d]# docker network create --driver bridge wordpress_net ad1ff3d972

  • docker 创建容器时指定容器ip的实现示例

    Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定. 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的. 我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可. 查看网络模式 docker network ls 创建一个新的bridge网络 docker network create --driver bridge --subnet=172.18.12.0/16 --gatewa

  • python实现扫描局域网指定网段ip的方法

    一.问题由来 工作的局域网中,会接入很多设备,机器人上的网络设备就2个了,一个巨哥红外,一个海康可见光.机器人还有自身的ip. 有时候机器人挂的多了,设备维修更换中,搞来搞去就不记得ip是什么,用自带的软件的确能扫出来,但是这就要开两个windows环境下的软件,耗时耗力,折腾.正好在linux,那简单,敲命令. nmap -P 192.168.1.0/24 可以扫描出 192.168.1.0~192.168.1.255的全部ip 但是前提是要装过nmap apt-get install nma

  • 使用 Docker Compose 构建复杂的多容器 App的方法

    目录 1 为什么需要 Docker Compose 2 什么是 Docker Compose 3 Docker Compose 的使用 3.1 启动容器 3.2 停止并删除容器 1 为什么需要 Docker Compose 在构建容器过程中,一般需要重复运行一些命令, 如 docker build ,docker run 等等,这些命令有时冗长而复杂,逐个重复运行这些命令十分繁琐,对于多容器的复杂应用尤其如此.使用 Docker Compose 工具能极大地简化容器的创建.管理和维护. 2 什么

  • docker overlay实现跨主机的容器互通的方法

    目录 1. docker配置 2. 创建注册中心与网络 3. 启动容器 环境说明 IP 注册中心 192.168.20.5 consule 192.168.20.6 192.168.20.7 1. docker配置 所有的物理机都需要配置,只需要更改相应的网卡名eno3与consul地址 sudo vim /lib/systemd/system/docker.service #ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/contai

  • centOS7 桥接模式设置静态Ip的方法步骤

    前言 如果你虚拟机IP是自动获取的,难免会碰到IP经常变动,给xshell相关连接工具使用造成不便,那么怎么固定IP且正常访问外网地址呢?由于主机网络采用的是自动获取IP方式,所以每次重启机器可能导致IP地址的变更,不利于项目的部署和运行,查阅了一些资料后,为Linux虚拟机配置了静态IP地址.让小编告诉你 通俗的说,静态ip就是虚拟机的ip 外界想要连你的虚拟机的ip LinuX登入管理员的账号密码 一.虚拟机选择桥接方式 1.  在编辑--虚拟网络编辑器中打开编辑器,如下面这两个图所示,选择

  • centOS7 NET模式设置静态Ip的方法步骤

    前言 NAT转发:简单地说,NAT就是在局域网内部网络中使用内部地址,而当内部节点要与外部网络进行通讯时,就在网关(可以理解为出口,打个比方就像院子的门一样)处,将内部地址替换成公用地址,从而在外部公网(internet)上正常使用,NAT可以使多台计算机共享Internet连接,这一功能很好地解决了公共 IP地址紧缺的问题.通过这种方法,可以只申请一个合法IP地址,就把整个局域网中的计算机接入Internet中.这时,NAT屏蔽了内部网络,所有内部网计算机对于公共网络来说是不可见的,而内部网计

  • docker compose自定义网络实现固定容器ip地址

    由于默认的bridge桥接网络,重启容器后会改变ip地址.在一些场景下我们希望固定容器IP地址. docker-compose是docker的一个编排工具,相对于命令模式创建网络,容器等.使用配置文件相对来说更方便,可追溯问题. 直接粘贴docker-compose.yml文件 version: '2' services: nginx: image: nginx:1.13.12 container_name: nginx restart: always tty: true networks: e

  • Docker每次启动容器,IP及hosts指定的操作

    前言 每次在使用Docker启动Hadoop集群的时候,都需要重新绑定下网卡,固定IP,同时修改/etc/hosts文件,非常麻烦,于是想探寻下原因及优化. 一.原因 /etc/hosts, /etc/resolv.conf和/etc/hostname,容器中的这三个文件不存在于镜像,在启动容器的时候,通过mount的形式将这些文件挂载到容器内部.因此,如果在容器中修改这些文件的话,修改部分不会存在于容器的top layer,而是直接写入这三个物理文件中. 为什么重启后修改内容不存在了?原因是:

  • Docker 配置网络使用bridge网络的方法

    就网络而言,桥接网络(bridge network,也叫网桥)是一种链路层设备,用于转发网段之间的流量. bridge 可以是硬件设备或在主机内核中运行的软件设备. 对 Docker 而言,桥接网络使用允许容器连接到同一个桥接网络来通信的软件网桥,同时提供与未连接到该桥接网络的容器的隔离.Docker bridge 驱动程序自动在主机中安装规则使不同桥接网络上的容器不能直接相互通信. 桥接网络用于在同一个 Docker 守护进程上运行的容器通信.对于不同 Docker 守护进程的容器,可以在操作

随机推荐