修改已创建docker容器绑定的宿主机IP及映射端口

背景

为了便于服务打包部署,现将所有服务部署在docker容器中,由docker容器内的nginx做反向代理。目前,运行的docker容器绑定的宿主机IP及映射端口为0.0.0.0:443->443/tcp,docker容器内部以root用户运行Nginx线程。基于安全考虑,docker容器绑定的必须是宿主机的实际IP,且在docker容器内不能以root用户启动Nginx的woker线程。

解决方案

在docker容器内,切换非root用户启动Nginx,结果启动报错,报错信息如下:

nginx: [emerg] bind() to 0.0.0.0:443 failed (13: Permission denied)

出现上述问题,是因为在大多数系统中,端口号小于1024为特权端口,需要管理员权限(通常是root用户)才能绑定。要想以非root用户启动Nginx,则需要修改docker容器内Nginx的监听端口。修改Nginx监听端口号为8443后,docker容器内nginx成功启动。

要想外部服务能够正常访问docker容器内的服务,修改完docker容器内Nginx的监听端口,则需要同步修改docker容器的映射端口。

IP和端口修改后的最终映射结果是:10.110.8.18:443->8443/tcp。操作步骤如下:

1. 获取运行容器的ID。在宿主机上执行命令:docker ps -a,查看运行的容器信息

[app@vm_8_18_centos ~]$ docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS       PORTS                   NAMES
dc5fe072b0bb   92d284c560c4   "/bin/bash"   2 days ago   Up 2 hours   0.0.0.0:443->443/tcp   dev_v1.0

2. 停掉运行的容器。执行如下命令,停止运行的容器:docker stop [容器ID]

3. 查看容器的配置文件目录。在宿主机上执行命令: docker inspect [容器ID] | grep ResolvConfPath ,查看docker容器配置文件目录(resolv.conf前面的路径即为配置文件所在目录):

[app@vm_8_18_centos ~]$ docker inspect dc5fe072b0bb | grep ResolvConfPath
        "ResolvConfPath": "/var/lib/docker/containers/dc5fe072b0bbe556ccdce7fd72fccc112d0db46ec37709be389b2e85e171a354/resolv.conf",

4. 修改hostconfig.json、config.v2.json文件。进入目标容器的配置文件目录,在hostconfig.json文件中找到“PortBindings”配置项,然后映射的容器端口号443修改为8443,同时修改绑定的宿主机IP为10.110.8.18:

"PortBindings":{
    "8443/tcp":[
        {
            "HostIp":"10.110.8.18",
            "HostPort":"443"
        }
    ]
}

在config.v2.json文件中找到“ExposedPorts”配置项,将映射的容器端口443改为8443:

"ExposedPorts":{
   "8443/tcp":{}
}

5.重启docker服务。为了使修改的配置生效,必须重启docker服务(先停服务,再重启服务)。

  1. 停止docker服务:systemctl stop docker
  2. 启动docker服务:systemctl start docker

在非root用户下执行systemctl命令可能会报错,若报错,可以切换到root用户重试。

6.重启docker 容器。制定如下命令重启docker 容器:docker start [容器ID]。

验证

重启docker容器后,使用 docker ps命令查看运行的docker容器信息,结果如下:

[app@vm_8_18_centos ~]$ docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS       PORTS                   NAMES
dc5fe072b0bb   92d284c560c4   "/bin/bash"   2 days ago   Up 2 hours  10.110.8.18:443->8443/tcp   dev_v1.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值