docker创建容器后添加额外的端口映射

给创建好的docker容器添加额外端口映射

    • 介绍
    • 具体步骤
      • 安装docker
      • 添加docker端口映射

介绍

最近在研究docker,发现个问题就是创建docker容器之后不能再继续添加端口映射了,于是写一下我新加端口映射的记录,供大家参考

具体步骤

首先我使用的是一台centos7的虚拟机,然后在虚拟机内创了一个docker容器,镜像从网易云的docker仓库拉取下来的
https://c.163yun.com/hub#/m/home/
docker创建容器后添加额外的端口映射_第1张图片
docker创建容器后添加额外的端口映射_第2张图片
下载地址为:docker pull hub.c.163.com/public/centos:6.7-tools
也是我们在创建docker时需要使用的命令
因为版本中有7.2-tools,所以我把命令改成了
docker pull hub.c.163.com/public/centos:7.2-tools

安装docker

# 1.下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2
# 2.设置下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 3.安装Docker
yum -y install docker-ce
# 4.启动Docker并添加开机启动
systemctl start docker
systemctl enable docker

验证Docker是否安装成功

docker version
docker run hello-world

如果执行第一条命令能出现版本号,意味着docker安装成功
下面开始创建centos的容器

# 1.获取centos镜像
docker pull hub.c.163.com/public/centos:7.2-tools
# 后台运行docker,名字为centos-test,设置高权限,端口映射从本地2200到docker的22端口(用于ssh连接)
docker run -d --name centos-7.2 --privileged=true -p 2200:22 hub.c.163.com/public/centos:7.2-tools /usr/sbin/init
# 进入docker
docker exec -it centos-7.2 /bin/bash

能进入代表启动成功
exit退出
docker ps -a查看所有的docker容器,其中会有写端口映射的内容
在这里插入图片描述
这个就是本地的2200端口映射到docker的22端口

添加docker端口映射

因为docker的start指令没有-p参数,所以只能通过修改配置文件来增加端口映射

注意:在添加端口映射前要关掉相应的docker容器,修改文件之后要重启docker服务,然后再开启相应的容器,也就是先docker stop XXX,然后修改配置文件,然后systemctl restart docker,最后docker start xxx

docker的主目录在/var/lib/docker,docker容器的目录在这个目录的containers/中,这里的文件夹名字很长,不过文件夹前12位字符,就是通过docker ps -a展示出来的CONTAINER ID

我的centos容器的CONTAINER ID为ada5bcd7d743
所以我的这个容器的文件夹名字就是以这个开头的,进入到这个容器的目录中
/var/lib/docker/containers/ada5bcd7d7433d585c87eb85ebf6bbbade43f190a5874c1e1e9e0f0ff06a0a1d

里面有config.v2.jsonhostconfig.json两个文件需要修改,这里我把两个文件传到本地计算机,修改完之后再传上去,这样本地编辑器有格式化工具,方便修改

# 这里是 config.v2.json文件,我们可以找到如下的内容
# 我们在"Tty"这一项上面的"ExposedPorts"添加内容
# 如果没有做过端口映射,那"ExposedPorts"是空的,直接按照我这个格式改就可以
"ExposedPorts": {
	"22/tcp": {},
	# 这里是我们添加的内容
	"80/tcp": {}
},
"Tty": false,

# 这个文件还有个位置需要更改
# 在下面有"Ports"一项,这里按照之前的22端口映射的格式,加了一项80的端口映射
# "80/tcp"指的是容器内部的端口,使用tcp协议,里面的"HostPort"指定的外部主机的端口800
"Ports": {
            "22/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "2200"
                },
                {
                    "HostIp": "::",
                    "HostPort": "2200"
                }
            ],
            # 这一项是我添加的内容
            "80/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "800"
                },
                {
                    "HostIp": "::",
                    "HostPort": "800"
                }
            ]
        },
# 这里是 hostconfig.json文件,我们可以找到如下的内容
# 按照之前创建容器时指定的22号端口的映射配置
# 我添加了一项格式相同的配置80端口的映射
# "80/tcp"指的是容器内部的端口,使用tcp协议,里面的"HostPort"指定的外部主机的端口800
"PortBindings": {
        "22/tcp": [
            {
                "HostIp": "",
                "HostPort": "2200"
            }
        ],
        # 这一项是我添加的内容
        "80/tcp": [
            {
                "HostIp": "",
                "HostPort": "800"
            }
        ]
    }

这只是文件内容的一部分,不要直接把这些内容覆盖进去
配置文件修改完成之后上传到主机服务器上
systemctl restart docker重启docker服务
docker ps -a查看之前的docker容器,记录下来CONTAINER ID
docker start [CONTAINER ID]通过你的CONTAINER ID启动docker,也可以使用之前指定的名字,我的是centos-7.2
docker ps -a这时我们看到我们的docker容器已经增加了端口映射
在这里插入图片描述

你可能感兴趣的:(docker,centos,docker,centos)