docker给运行中的容器添加端口映射

问题描述

docker上面运行容器,run -p 的时候只映射了一个端口,后面对该nginx做扩展,需要开放其他端口。当然重新再启一个容器在docker启动参数里多配置几个-p端口映射是能解决的,但是如果自己不想重新启一个容器,试试下面两种方式

解决方法

方法一:

1.获取容器ip

docker inspect -f '{
   
   {range .NetworkSettings.Networks}}{
   
   {.IPAddress}}{
   
   {end}}' 容器id

2.利用iptable转发,将容器的端口80映射到docker主机的端口8081

iptables -t nat -A  DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:80

方法二:

1.docker ps命令找到容器的id

2.将该容器设为自启动

docker update 容器id --restart=always

3.用命令docker inspect 6fe599270a48 | grep HostsPath找到nginx容器端口配置文件地址

[root@VM-0-6-centos 123]# docker inspect 6fe599270a48 | grep HostsPath
        "HostsPath": "/var/lib/docker/containers/6fe599270a482e0bf6b3c9a38a8d6212f6f5339e65b7bf32834ab9a5c6e81f9f/hosts",

4.进入配置文件路径

5.关闭docker容器

systemctl stop docker

注意:如果出现Warning: Stopping docker.service, but it can still be activated by:
  docker.socket这样的错误,需要再执行一下systemctl stop docker.socket

6.修改hostconfig.json配置文件

vim hostconfig.json

添加我们需要的端口映射:

"PortBindings": {
    "80/tcp": [
        {
            "HostIp": "",
            "HostPort": "8081"
        }
    ],
    "8000/tcp": [
        {
            "HostIp": "",
            "HostPort": "8000"
        }
    ],
    "9000/tcp": [
        {
            "HostIp": "",
            "HostPort": "9000"
        }
    ]
}

7.修改config.v2.json配置文件

同路径下打开config.v2.json,修改:ExposedPorts和Ports

"ExposedPorts": {
    "80/tcp": {},
    "8000/tcp": {},
    "9000/tcp": {}
}
"Ports": {
		"80/tcp": [{
			"HostIp": "0.0.0.0",
			"HostPort": "80"
		}],
		"8000/tcp": [{
			"HostIp": "0.0.0.0",
			"HostPort": "8000"
		}],
		"9000/tcp": [{
			"HostIp": "0.0.0.0",
			"HostPort": "9000"
		}]
}

8.重启docker容器

systemctl start docker

猜你喜欢

转载自blog.csdn.net/qq_42014561/article/details/128593933