docker修改已有容器的权限和端口映射
使用docker的容器时,可能会遇到当前容器的权限不足,或是端口映射不正确的情况,此时需要对其进行修改。常用的方法是将容器打包成镜像,再通过镜像创建新的容器,在创建时添加权限和新的端口映射,这里给出不通过创建新容器来修改已有容器权限和端口映射的方法。
查看容器的配置信息
docker inspect 容器名
创建一个非特权模式的,3311端口映射到3306端口的centos7容器。
[root@centos2 ~]# docker create -it --name centos7 -h mycentos7 -p 3311:3306 centos:7.9.2009
0adffc8b817f00f07d2b6dd077dbbcff3ef27f400ab0d8141142faede38894db
记录id
进入这个容器
[root@centos2 ~]# docker start centos7
centos7
[root@centos2 ~]# docker exec -it centos7 /bin/bash
[root@mycentos7 /]#
安装httpd并运行,此时没有权限
[root@mycentos7 /]# yum -y install httpd
[root@mycentos7 /]# systemctl start httpd
Failed to get D-Bus connection: Operation not permitted
退出容器,关闭容器和docker
进入宿主机/var/lib/docker/containers目录,找到对应容器id的目录
cd /var/lib/docker/containers
此处只创建了一个容器,进入该目录
找到
config.v2.json
hostconfig.json
两个文件
先备份
cp -ar config.v2.json config.v2.json.backup
cp -ar hostconfig.json hostconfig.json.backup
修改hostconfig.json
vim hostconfig.json
字段"PortBindings":{“3306/tcp”:[{“HostIp”:“”,“HostPort”:“3311”}]}为端口映射,将容器的3306映射到宿主机的3311,这里将其修改为映射到3313
字段"Privileged":false为特权模式标签,这里标记为非特权模式,将其修改为true
保存退出
修改config.v2.json
vim config.v2.json
“ExposedPorts”:{“3306/tcp”:{}}为存在映射端口,此处不修改
两处/bin/bash 修改为/sbin/init
保存退出
重启docker,启动容器
可以看到容器shell已经改变
查看端口映射,可以看到3306的映射端口已经从3311改为了3313
进入容器,启动httpd,正常启动,说明已经进入特权模式