Docker每次启动容器,IP及hosts指定

原文链接: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

[[email protected]-7 /]# docker exec -it hadoop0 bash

[[email protected] /]# 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
[[email protected] /]#

 

原文地址:https://www.cnblogs.com/smlie/p/12081650.html

时间: 2024-11-08 21:50:08

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

redhat7.4 docker run启动容器报错container_linux.go:449

问题现象: 在redhat服务器上使用docker run启动容器时报错:docker: Error response from daemon: OCI runtime create failed: container_linux.go:449:container init caused "write /proc/self/attr/keycreate: permission denied"": unknown. 问题原因:由于操作系统已启用SELinux,造成“/proc/

金庸武功之“易筋经”--docker pipework 设置容器IP在宿主机网段

一.主机环境及环境准备 宿主机IP:192.168.1.107 宿主机网关:192.168.1.1 容器IP:目的是设置为192.168.1.108 关闭Selinux 设置为网卡桥接模式 关闭防火墙 yum install bridge-utils -y yum install git -y 二.安装docker 增加repo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseu

docker容器ip地址的设定

mynetwork是自己定的网络名称 上图首句是用来查看容器的所有信息,第二句是查看所有容器的ip地址 创建具体网段的操作 创建固定ip的容器 指定了固定ip之后容器重启ip地址依然不会改变 -----------------------------------------------------------------------------------------------------------------手动分割-------------------------------------

利用docker compose启动gitlab及runner

添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' container_name: 'gitlab' restart: always hostname: 'gitlab.cjx.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://gitlab.cjx.com' # Add any othe

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

通过pipework来固定Docker容器IP

Docker容器固定IP分配 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: 1. host模式,使用--net=host指定. 2. container模式,使用--net=container:NAME_or_ID指定. 3. none模式,使用--net=none指定. 4. bridge模式,使用--net=bridge指定,默认设置. 默认选择bridge的情况下,容器启动后会通过DHCP获取一个地址,这可能

Docker安全--将用户添加到Docker组中进行启动容器与未添加到Docker组中的sudo执行的研究

/*************************************** * Author : Samson * Date : 08/25/2015 * Test platform: * gcc 4.8.2 * GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) * Docker version 1.7.1 * Debian GNU/Linux 7 * *************************************/ 结论: 对

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

环境 docker-ce-19.03.1-3.el7.x86_64 CentOS 7 一.查找.拉取镜像.启动容器1.查找镜像-docker search默认查找Docker Hub上的镜像,举例:Docker安装nginx [[email protected] ~]# docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Official build of Nginx. 11866 [OK] jwilder/ng

docker端口映射或启动容器时报错Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen

现象: [[email protected] ~]# docker run -d -p 9000:80 centos:httpd /bin/sh -c /usr/local/bin/start.shd5b2bd5a7bc4895a973fe61efd051847047d26385f65c278aaa09e4fa31c4d76docker: Error response from daemon: driver failed programming external connectivity on