原文链接:https://blog.csdn.net/u012834750/article/details/80508464

前言

每次在使用Docker启动Hadoop集群的时候,都需要重新绑定下网卡,固定IP,同时修改/etc/hosts文件,非常麻烦,于是想探寻下原因及优化。

一、原因

/etc/hosts, /etc/resolv.conf和/etc/hostname,容器中的这三个文件不存在于镜像,在启动容器的时候,通过mount的形式将这些文件挂载到容器内部。因此,如果在容器中修改这些文件的话,修改部分不会存在于容器的top layer,而是直接写入这三个物理文件中。

为什么重启后修改内容不存在了?原因是:每次Docker在启动容器的时候,通过重新构建新的/etc/hosts文件,这又是为什么呢?原因是:容器重启,IP地址为改变,hosts文件中原来的IP地址无效,因此理应修改hosts文件,否则会产生脏数据。
二、解决办法

在每次启动容器的时候指定IP、hostname、往/etc/hosts里添加hosts,命令如下:

docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 --add-host hadoop1:192.168.10.31 --add-host hadoop2:192.168.10.32  -d -P -p 50070:50070 -p 8088:8088 hadoop:master

Docker系列(四)Docker 网络模式及配置

--hostname :指定hostname;
--net : 指定网络模式
--ip:指定IP
--add-host :指定往/etc/hosts添加的host

以上命令需要docker1.9以上版本才行;

启动完容器后,进入容器查看 /etc/hosts

[root@centos-linux-7 /]# docker exec -it hadoop0 bash

[root@hadoop0 /]# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.10.31   hadoop1
192.168.10.32   hadoop2
192.168.10.30   hadoop0
[root@hadoop0 /]#

 

Docker每次启动容器,IP及hosts指定的更多相关文章

  1. docker中启动容器提示端口被占用

    docker中启动容器提示端口被占用,但是 docker ps -a 查不到信息 1.查询端口被占用的id netstat -ntpl |grep 3306 2.杀掉该id kill -9 如果kil ...

  2. Docker - Deepin中docker不能启动容器,-d也无效

    问题重现 1. 搭建mysql docker run -p 3306:3306 --name docker-mysql-5.7 -v $PWD/conf:/etc/mysql/conf.d -v $P ...

  3. docker 无法启动容器,run容器后状态为restarting

    问题:如题,无法进入容器,docker logs 容器id  发现 哦 ,原来缺少个文件,这些就容易了

  4. docker 开机自动启动容器

    注意:如果有存在多个容器,都占用了同一端口,那么只会起来一个,要注意,我在调试时候就遇到这个坑了 在使用docker run启动容器时,使用--restart参数来设置: docker run -m  ...

  5. 利用docker compose启动gitlab及runner

    添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' contain ...

  6. docker 创建容器时指定容器ip

    Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定. 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的. 我们可以创建自己的bri ...

  7. docker for windows 容器内网通过独立IP直接访问的方法

    Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用.一般过程是: 1.Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 ...

  8. docker之启动创建容器流程

    libcontainer的工作流程 execdriver的run方法通过docker daemon提交一份command信息创建了一份可供libcontainer解读的容器配置container,继而 ...

  9. 【Docker学习之三】Docker查找拉取镜像、启动容器、容器使用

    环境 docker-ce-19.03.1-3.el7.x86_64 CentOS 7 一.查找.拉取镜像.启动容器1.查找镜像-docker search默认查找Docker Hub上的镜像,举例:D ...

随机推荐

  1. 数据库事务ACID特效

    一.数据库事务正确执行的4个基础要素: 1.原子性 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节.事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状 ...

  2. Spring mvc mybatis 查询结果缺少字段 解决方法

    参考:https://blog.csdn.net/xiaofeifei8421/article/details/43231815

  3. Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练

    对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024. 我没有使用二分类,直接使用了四分类. 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始 ...

  4. python类的对象使用

    class student():    def __init__(self,age,sex):        self.age = age        self.sex = sex  #self._ ...

  5. CF755G PolandBall and Many Other Balls 题解

    从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解 一个常数和复杂度都很大的题解 令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的 ...

  6. 白手起家Django项目发布中篇_Centos下Python2和3并存环境部署

    python环境部署 我们今天学习的内容是如何将Django项目部署到linux服务器上,我们部署的linux系统是centos7首先,我们先在linux上搭建我们的Python3环境: 在这里首先强 ...

  7. 2.24 模拟赛 + DIV2 总结

    本来实在是不想打了,后来真的手痒. 晚上发现正进行DIV2然后就打了场,模拟,幸好没参加,逆风.排名2400 Codeforces Round #622 (Div. 2) A题十分钟过了 B题http ...

  8. 关于C++中vector<vector<int> >的使用

    1.定义 vector<vector<int>> A;//错误的定义方式 vector<vector<int> > A;//正确的定义方式 2.插入元素 ...

  9. day01-Python运维开发基础

    还是用思维导图来一遍,印象更深!

  10. 洛谷P4427 [BJOI2018]求和

    \(\Large\textbf{Description: } \large{一颗n个节点的树,m次询问,每次查询点i到点j的路径上所有节点点深度的k次方的和并对998244353取模(1\leq n, ...