修改运行中容器文件和配置
1.修改容器文件
通常我们修改容器内文件有几种方式:
1.主机中修改文件后覆盖容器文件
复制nginx容器中/usr/share/nginx/nginx.conf 文件到宿主机/user/local目录
docker cp nginx:/usr/share/nginx/nginx.conf /usr/local
然后我们在宿主机修改该文件后,再执行如下命令复制到容器中:
docker cp /usr/local/nginx.conf nginx:/usr/share/nginx
2.进入容器中修改文件(需容器运行状态)
docker exec -it 容器名或容器ID /bin/bash
然后在容器中修改文件
3.从宿主机直接修改
进入宿主机的/var/lib/docker/overlay2目录,所有的容器文件都在这个目录中,其目录结构如下:
[root@k8s-node2 data]# ll /var/lib/docker/overlay2
total 1376
drwx------ 3 root root 4096 Mar 24 22:33 017c8544da18e0728802afacaf1d4b82b2e25a45f002387127e1e7562b97f157
drwx------ 4 root root 4096 Apr 9 21:24 01945d88acf69858bd36aa58b1664d0ae1dcbf3fb577834a5448bda9d58f1955
drwx------ 4 root root 4096 Apr 4 22:25 028f3a02847ba35657291909eec22d550e619d0e9d04d16aa38d49b2db1b7ff4
drwx------ 4 root root 4096 Mar 18 10:33 03357dacab2261da06b1a60c4fe68848c1b2ccd46243ea0da4d624007985cc6a
drwx------ 4 root root 4096 Apr 13 09:06 03a6adb86b2e3f26e736d009a3bcda6d6408333a548fba26eb1658ffada34c4a
drwx------ 4 root root 4096 Mar 22 23:43 03e68a8a3e8a27486fba3449777bbe1621771aca00a92174816d2d6198ead090
drwx------ 4 root root 4096 Apr 5 11:41 05591f24968845b558618ff1d23686db0bd31c134c220de3ebfb57d34ee59043
这个目录结构完全无法看懂,我们可以通过如下命令找出其与容器之间的对应关系:
[root@k8s-node2 data]# docker ps -a -q | xargs docker inspect --format '{{.State.Pid}}, {{.Id}}, {{.Name}}, {{.GraphDriver.Data.WorkDir}}'
6893, f730670581305a7f0a86cd867de5a4a5a05cf2daae394e37a0fbb3ac0abe22b6, /k8s_mysql_mysql-deploy-7f7f6df98b-lk8br_kube-system_66a7e8b3-2633-4ddc-9dc2-/var/lib/docker/overlay2/edb7dd0f6081069381beb010560ff9b9d1858197adb05951cd20c81051017bad/work
5607, 2b28b834d7dfb4475986f3bca4e1108d7db1c1b07c735d773b2e048f4a0f2103, /k8s_prometheus_prometheus-68545d4fd8-4knl8_kube-system_ee24ecd5-81e8-40a0-9e67-88287be62e60_0, /var/lib/docker/overlay2/ad8de96993c535629d7fc2c0c956c31fd2da48a24854beaa03aac2d44c511e97/work
5474, eab2e034d2d80e487366e0c3d8a2105e0d59af06ec09545824188dace58ec379, /k8s_kong-konga_kong-konga-7cbf568cd7-944kx_kong_f2fc8ebd-77c8-4fd7-a807-963dc113218c_0, /var/lib/docker/overlay2/7db1798e730e5f298961cc3c61fe0760bf9257522b6772285bc7d196a28978e5/work
5426, 950b7c7391b1169c049e5b3e5035b717835a02aa800c296417f76c6d9da40ad8, /k8s_kubernetes-dashboard_kubernetes-dashboard-8594bd9565-8vdnn_kube-system_1d7a1aff-8caf-4a15-9dab-6f8b769b822d_0, /var/lib/docker/overlay2/d6a07bf5fae0c231bea7706d42586e7e2f4e9280bf5e7282715f5fb458fb9147/work
然后我们进入指定目录,以ES容器为例,我们进入其config目录修改文件,其路径如下:
/var/lib/docker/overlay2/d32d5b3effa141152f7385a954cdcd1725967f30418a55d314913a98f18f8fa7/diff/usr/share/elasticsearch/config
修改完毕后,重启容器即可。
2.修改环境变量
容器运行时我们使用docker run 命令通常会为容器添加一些支持时的环境变量,如果容器运行后再修改这些环境变量该如何操作呢?
一个容器所有的配置参数都保存在这个文件中,我们可以直接修改这个文件内容
/var/lib/docker/containers/【ID】/config.v2.json
【ID】获取方式和上面的一样,仍然使用docker ps -a -q | xargs docker inspect --format '{{.Id}}, {{.Name}}'
即可
注意操作顺序:
1.先停止docker '''service docker stop'''
2.vim修改/var/lib/docker/containers/【ID】/config.v2.json,这个json格式没有排版比较难处理。
3.再启动docker '''service docker start'''
示例:修改容器为自启动
service docker stop
vim /var/lib/docker/containers/【ID】/hostconfig.json找到
RestartPolicy改为如下内容
{"Name":"always","MaximumRetryCount":0}
保存后重启容器
service docker start
通常不建议这么修改容器配置,其缺点:如果你采用的是k8s部署模式,应该从yaml文件或镜像源入手,因为k8s会自动调度或重新部署,导致修改无效;