14-容器网络之host和none

14-容器网络之host和none

在之前的小节,我们有看到过 hostnone

通过 docker network ls 查看。

none 网络

  1. 删除 test1 容器

    docker stop test1 && docker rm test1
    
  2. 创建 test1 容器并连接到none网络

    docker run -d --name test1 --network none busybox /bin/sh -c "while true; do sleep 3600; done"
    

    使用 docker ps 查看是否启动运行。

  3. 查看 none 网络

    docker network inspect none
    
    "Containers": {"a8eff69c2dc062ba63578359533f49cf8e619aed1762d393714f93ffcfba34d5": {"Name": "test1","EndpointID": "d961a29c4293398cfa8dfa58ea70d88ca3071063c6e3773e0102c492bdf387a2","MacAddress": "","IPv4Address": "","IPv6Address": ""}
    }
    

    我们发现 test1 容器并没有被分配 ip 地址。

  4. 进入 test1 容器查看

    docker exec -it test1 /bin/sh
    
    / # ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
    

    我们发现这个 test1 容器并没有其它网络接口,只有 lo 接口。那么我们可以理解为这个 test1 它所在的 net namespace 是一个孤立的网络。

    我们只能通过exec 进入这个容器。主要用在哪里呢?一般是创建高安全的容器,比如用来存储密码等,然后我们只能通过exec进入容器,一般来说比较安全。

  5. 详细介绍 lo 网络接口

    lo 代表 127.0.0.1,也就是 localhost,是 loopback interface 缩写,含义为 回环接口

    当你从一台linux主机向自身发送数据包时,实际上的数据包是通过虚拟的lo接口来发送接受的,而不会通过你的物理网卡 eth0/eth1…

    Loopback接口是虚拟接口,是一种纯软件性质的虚拟接口。任何送到该接口的网络数据报文都会被认为是送往设备自身的。

host网络

  1. 删除 test1 容器

    docker stop test1 && docker rm test1
    
  2. 创建 test1 容器并连接到host网络

    docker run -d --name test1 --network host busybox /bin/sh -c "while true; do sleep 3600; done"
    

    使用 docker ps 查看是否启动运行。

  3. 查看 host 网络

    docker network inspect host
    
    "Containers": {"3d9350ed5a103364ba26efa1b94556baa5e988d14c50494024e049aae8d35c97": {"Name": "test1","EndpointID": "ad353df20fc3ee12777d208edb65555d04fd87be672b4a4eb5284eeeb9a63d32","MacAddress": "","IPv4Address": "","IPv6Address": ""}
    }
    

    我们可以看到 test1 容器也是没有 ip 地址的。

  4. 进入 test1 容器查看

    docker exec -it test1 /bin/sh
    

    查看网络

    / # ip a
    

    发现这个返回的内容和在容器外面执行 ip a 是一样的。

    exit
    $: ip a
    

    这说明连接 host network的容器test1,它没有自己的独立的 net namespace,而是使用了 主机所在的 host 共享一个 net namespace

    这种方式创建的一个容器会有什么问题呢?因为共享的网络命名空间,那就意味着可能会出现端口冲突。

端口冲突案例

  1. 创建一个连接host网络的 web1 容器

    docker run -d --network host --name web1 nginx
    

    查看运行情况docker ps,正常运行。

  2. 创建一个连接host网络的 web2 容器

    docker run -d --network host --name web2 nginx
    

    查看运行情况

    [vagrant@10 flask-web]$ docker ps
    CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                    NAMES
    3ae662c4b4ef        nginx                 "nginx -g 'daemon of…"   2 seconds ago       Up 1 second                                  web2
    

    我们发现刚刚创建的web1 容器不见了,这是为什么呢?原因就是端口冲突了。那我们来验证一下。

  3. 查看web1 容器运行日志

    docker logs web1
    2019/02/13 12:18:17 [emerg] 1#1: bind() to 0.0.0.0:80 failed (98: Address already in use)
    nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
    

    从报错信息中我们看到,80 端口已经被占用,所以web1容器停止运行。

  4. 删除web1和web2

    docker stop web1 && docker rm web1
    docker stop web2 && docker rm web2
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15-多容器复杂应用的部署

15-多容器复杂应用的部署 此节主要是通过部署一个复杂的应用场景&#xff0c;进而练习容器的网络相关知识。 创建一个flask-web应用 创建一个 flask-web 文件夹 mkdir flask-web在此文件夹内创建 app.py 文件 cd flask-web touch app.py编写一个简单的 web 程序 import os im…

16-多机器通信

16-多机器通信 回顾上节课的思考题。 flask-redis 想访问 redis&#xff0c;该如何通信&#xff1f; 创建另外一台linux虚拟机 直接拷贝Vagrantfile文件创建一个 centos 虚拟机 我们创建一个centos7-2文件夹&#xff0c;然后创建虚拟机 vagrant up创建的过程中提示选择网络接…

17-Docker的数据持久化介绍

17-Docker的数据持久化介绍 回顾容器与镜像 容器是在镜像之上创建的一层运行时层&#xff0c;这一层是可以读写的&#xff0c;我们能够在容器内添加数据&#xff0c;读取数据。 也就是说我们在创建容器的时候&#xff0c;我们能够在容器内创建文件&#xff0c;安装软件等等&a…

18-数据持久化-Data Volume

18-数据持久化-Data Volume Data Volume 使用场景。一般来讲有些容器自己会产生一些数据&#xff0c;我们不想数据随着容器的销毁而销毁&#xff0c;我们想保存数据&#xff0c;正常一般用在数据库&#xff0c;比如我们想保存数据库中的数据&#xff0c;这个时候我们就会使用 …

19-数据持久化-Bind Mounting

19-数据持久化-Bind Mounting Bind Mounting 与 Data Volume区别 Data Volume 需要在 Dockerfile 内声明需要创建的 volume 目录。 Bind Mounting 则不需要在 Dockerfile 声明 volume&#xff0c;只需要在创建容器的时候&#xff0c;也就是 run 的时候声明即可。 如: dock…

go自定义包教程

go自定义包教程 而是环境为 go version go1.11 linux/amd64linux mint 19 创建一个自定义的包 切换到src目录下&#xff0c;创建demo目录 cd src mkdir demo再创建smap 文件夹 cd demo mkdir smap创建包文件 cd smap touch map.gomap.go文件内容 package smapimport "…

在Linux中对硬盘进行分区、格式化和挂载

在Linux中对硬盘进行分区、格式化和挂载 我最近有一个全新的4-TB硬盘加入我的电脑。所以我需要在Linux中安装它。为此&#xff0c;我需要执行以下操作&#xff1a; 分区格式化挂载检查是否已安装硬盘驱动器 分区 首先&#xff0c;在通过SATA和电源线将硬盘连接到计算机后&am…

Angular gitlab持续集成之runner配置

gitlab持续集成 安装Runner 正常安装 sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64sudo chmod x /usr/local/bin/gitlab-runner sudo useradd --comment GitLab Runner --creat…

javascript编译压缩

javascript编译 js是JavaScript 源码文件&#xff0c; .min.js是压缩版的js文件。 .min.js文件经过压缩&#xff0c;相对编译前的js文件体积较小&#xff0c;传输效率快。经过编码将变量和函数原命名改为毫无意义的命名&#xff0c;以防止他人窥视和窃取 js 源代码 在线版 g…

vscode设置中文

vscode设置中文 当我们安装完成vscode后&#xff0c;会发现它是中文的&#xff0c;因为默认情况下&#xff0c;vscode使用的语言为英文(us)。 那很多同学是不喜欢英文的&#xff0c;不是看不懂&#xff0c;而是不方便哈。 修改语言配置文件 使用快捷键组合【CtrlShiftp】 在…

linux下编译boost

linux下编译boost 下载boot库 官方下载地址 下载完成会解压。 编译 1.进入解压后的文件夹内 cd boost_1_69_0 执行下面的语句 ./bootstrap.sh --with-librariesall --with-toolsetgcc–with-libraries 指定编译哪些boost库&#xff0c;all的话就是全部编译&#xff0c;只想…

C++通过原子变量代替互斥量

C通过原子变量代替互斥量 废话不多说&#xff0c;直接上代码。 实现类似lock_guard功能 #include <atomic> #include <thread>class ClockGuard { public:ClockGuard(std::atomic_flag & atomic):m_lockedFlag(atomic){lock();}~ClockGuard(){unlock();}voi…

conky安装配置

conky安装配置 安装conky sudo apt-get install conky-all修改配置 在主目录下创建’.conkyrc’ 文件内容&#xff1a; # set to yes if you want Conky to be forked in the background background no cpu_avg_samples 2 net_avg_samples 2 out_to_console no # X font w…

Windows子系统安装图形界面

Windows子系统安装图形界面 有很多同学需要使用 linux 系统,但是又不想真正安装一个 linux 系统。于是微软大哥就把 ubuntu 系统集成到 windows 内了&#xff0c;你说 微软 屌不屌&#xff1f; 言归正传。 安装Xlaunch 因为这个是最靠谱的图形化界面了&#xff0c;所以不解…

C++ 判断类是否有某变量

C 判断类是否有某变量 话不多说上代码。 #define HAS_MEMBER(member)\template<typename T, typename... Args>struct has_member_##member\ {\private:\template<typename U> static auto Check(int) -> decltype(std::declval<U>().member(std::declv…

C++将地址转换为字符串

C将地址转换为字符串 有时候在做程序设计的时候&#xff0c;有可能需要做一个类似messageBus的功能&#xff0c;并且需要一个key保证唯一&#xff0c;那么如何实现这个key的唯一呢&#xff1f;大致两种思路: 使用函数签名&#xff0c;因为messagebus绑定的是一个函数&#xf…

Angular 8之升级和新功能摘要

Angular 8之升级和新功能摘要 Angular 8已经到来,并带来了大量的工作流程和性能改进。就像我们之前发布的几个版本一样,让我们回顾一下Angular 8的新功能,以及如何将Angular 7应用程序升级到Angular 8。 Angular 8中明显的新功能数量有限,但确实还有一些好东西: Differen…

Linux下查看显卡PCIE速率x16x8x4及设定

Linux下查看显卡PCIE速率x16x8x4 由于linux软件并不是很齐全所以查看显卡占用PCIE的带宽并不直观&#xff0c;所以本文介绍如何查看。 Windows下使用GPU-Z即可查看 Linux 确定当前显卡型号 lspci | grep NVIDIA返回 02:00.0 3D controller: NVIDIA Corporation GM107M [GeFor…

Deepin安装最新显卡RTX2080Ti及CUDA10.1

Deepin安装最新显卡RTX2080Ti及CUDA10.1 废话不多说直接上教程。 本系统为Deepin 15.10.2&#xff0c;是基于debian 9发布的&#xff0c;不排除后续deepin升级为debian 10&#xff0c;就目前来看是和ubuntu 16.04一样&#xff0c;使用的是debian 9&#xff0c;所以下载安装包等…

Anaconda安装Tensorflow环境

Anaconda安装Tensorflow环境 Anaconda安装 下载安装包&#xff0c;请到这个地址下载 安装 打开终端执行&#xff1a; bash Anaconda3-5.3.1-Linux-x86_64.sh安装过程全部yes即可。 然后重新启动。 验证是否安装成功 conda --version如果没有报错&#xff0c;并且输出下面内容…