默认情况下使用 docker run -itd --name [容器名称] [镜像名称/id] 指令启动容器,ip是自动分配的,一旦容器重启,ip就会重新被分配,这样就会造成ip频繁变化,因此需要在启动的时候指定固定ip

1、查了容器网络类型,打开cmd,输入以下指令
docker network ls

一般情况下,默认会有三种网络类型,windows容器,所以如下图三种,但是linux容器是bridge,none,host三种(windows容器不支持)
在这里插入图片描述
创建一个网络类型

docker network create --subnet=172.18.0.0/16 -d nat mynet
docker network create --subnet=172.18.0.0/16 -d ics mynet
docker network create --subnet=172.18.0.0/16 -d [默认网络类型名称] [自定义网络名称]
  • 172.18.0.0/16:中16表示二进制掩码16个1:11111111.11111111.0000000.0000000,转换成十进制的掩码是255.255.0.0,不知道docker网关ip的可以继续往下看有详细说明
    在这里插入图片描述
2、判断docker容器默认使用的是哪种网络类型方法一(推荐,虽然麻烦,但是准确)

由于这个不好判断,所以建议先随便启动一个docker 容器,然后查询详细信息,就可以知道了,我这里先安装一个nginx做测试(你可以安装任何容器测试)

(1)拉取镜像,启动容器
docker pull nginx
docker run --name nginx -d nginx
(2)查看容器信息,获取默认网络类型和网关ip
docker inspect nginx
(3)移除nignx容器,重新新建(启动)一个容器,我还是以nginx为例,所以我要先删除现有的容器
# 停止容器
docker stop nginx
#删除容器
docker rm nginx
# 新建(启动)容器
docker run --name nginx --network mynet --ip 172.18.106.12 -d nginx

语法说明:

docker run -itd --name [容器名称] --network [自定义网络模式] --ip [指定的固定IP地址] [镜像名称/id]

说明:固定IP是根据容器网关ip来指定的,比如容器网关IP为:172.18.69.1,那么我就会把容器的固定IP设置为以172.18开头,如172.18.106.12,根据个人喜好设置为任意ip,但是注意,容器与容器之间ip不能重复

(4)查看是否设置成功
docker inspect nginx

不出错的话,下图中就是咱设置的固定ip,而且,现在重启容器之后,IP不会发生变化。
在这里插入图片描述

3、判断docker 容器使用哪种网络模式和网关ip,方法二

打开网络连接,如图可知docker默认网络类型,我的计算机网络情况如下,你的可能有所区别,下图仅供参考
在这里插入图片描述
打开cmd,输入ipconfig
在这里插入图片描述

通过多次尝试,发现windows docker 容器在计算机重启之后,网络类型会被重置,也就是重启之后,自定义网络会被自动清除,除非不重启计算机,否则目前无法做到真正的固定ip,当然,如果切换到linux容器之后,一切就会解决,请看01-04 查看linux docker容器网络类型,并设置固定IP

切换到linux容器:单击如图docker图标–>switch to linux containers…
在这里插入图片描述
接下来就是等待,切换成功之后,你会发现setting与windows容器有所变化
在这里插入图片描述

# cd /opt # git clone https://github.com/cybergate-services/docker-coturn.git # cd /opt/docker-coturn 2.要设置docker compos environment运行,请执行以下操作: # ./set-env.sh 3.安装容器 # docker-compose up -d 时隔二十天,喵哥又开始设置docker里centos容器网络。目标是实现在宿主——Windows10下面可以访问docker中centos容器里的MySQL数据库。 之前一篇博客记录的是喵哥妥协解决这个问题的方案——在172.17.0.0这个网段里面设置两个centos容器,这样就可以保证两者互相访问数据库,但这没有达到喵哥对数据库服务器的要求——在宿主(Windows10)下编程使用数... docker自身默认提供了四种网络模式:none、bridge、container、host。除了这四种网络模式外,还可以通过插件自定义一些网络模式,比如macvlan、overlay等。默认的这四种网络模式其实很好理解,建议自行动手尝试一下!none模式--network none:none模式下创建的容器除了自带的lo回环网卡设备外,没有任何网卡、路由等信息,就是一种封闭式容器。这种模式下给了... netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0 其中192.168.50.88 为要映射的主机IP,255.255.255.0为默认网关 然后执行下列命令,更改linux主机IP wsl -d Ubuntu -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label et 一共有三种网络配置模式bridge、host模式和自定义 docker的默认网络模式就是bridge,也是使用最频繁的,在容器启动时,可以通过-p 指令指定对应映射的端口,而host模式容器会没有自己的网卡,直接映射主机的网卡(高概率出现端口重复) docker run -itd --name spring01 -p 8081:8081 spring:1.0 就是将主机上的8081端口映射给容器的8081端口(前面的端口是主机的,后面的是容器的)可绑定多. 感兴趣可以搜一下 port-forward 原理,还没时间研究,无法直接访问ip大概原因和在windows/mac下docker无法用host模式相关,linux下无此问题 最近在使用容器进行启动开发的项目,但发在使用相同的镜像在linux系统下的容器中启动后,可以通过linux IP:port (映射的端口)和容器IP:port访问,而在windows下不能访问的问题。 这里说一下原因解决办法 在windows中安装docker,实质上是启动了一个Linux虚拟机,在Linux中运行的docker,所以直接使用windowIP:port的方式是访问不到的,这里应该使... 使用 --network=none ,docker 容器就不会分配局域网的IP主机网络 使用 --network=host,docker容器网络会附属在主机上,两者是互通的 2、首先建立网络,并指定网段 docker network create --driver bridge --subnet 172.18.0.0/24--gateway 172.18.0.1docker_net 3、验证网络配置 dock... 当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。 bridge模式docker的默认网络模式,不写--net参数,就是bridge模式。此模式会为每一个容器分配Network Namespace、设置IP