docker内的文件为什么不能直接编辑
通常是因为在默认情况下Docker容器启动后,容器内的文件系统是以只读方式挂载的。这是为了保证容器的可移植性和隔离性,防止容器内的更改影响到宿主机或其他容器,造成不必要的麻烦和困扰。(既是优点也是缺点)
分享修改方法
方法1:复制
容器当前状态:容器已处于启动状态
操作位置:在宿主机上操作
将容器内的文件复制到外面来,修改后,再复制进去。(注:复制进去后重启容器,不然不生效,就尴尬)
# 复制本地文件到容器(注:查看当前路径位置)
docker cp 文件名 容器ID:/路径/test.txt #容器外操作
# 复制容器内指定的文件到本地当前位置
docker cp 容器ID:/路径/test.txt ./文件名 #容器外操作
方法2:挂载(推荐使用)
容器当前状态:容器处于未启动状态
操作位置:在宿主机上操作
需要在运行之前就做好各种准备
# 创建一个运行的nginx,为下步复制文件到本地做准备
#步骤1: docker run --name nginx-80 -p 80:80 -d nginx
# 复制nginx的配置目录到本地
#步骤2: docker cp nginx-80:/etc/nginx/ /MyDockerData/nginx/conf/
Successfully copied 3.58kB to /MyDockerData/nginx/conf/cond.d
# 复制nginx的日志到本地
#步骤3: docker cp nginx-80:/var/log/nginx /MyDockerData/nginx/log
Successfully copied 2.56kB to /MyDockerData/nginx/log
# 复制网站目录到本地
#步骤4: docker cp nginx:/usr/share/nginx/html /MyDockerData/nginx/html
Successfully copied 1.54kB to /MyDockerData/nginx/html
# 运行容器并挂载目录。格式:<-p 端口映射><-v 路径映射>
实例:docker run --name nginx -p 80:80 -v $HOME/本地路径:内部路径 -v $HOME/本地路径:内部路径 -d nginx
#步骤5: docker run --name nginx-8888 \
-p 8888:80 \
-v /MyDockerData/nginx/html:/usr/share/nginx/html \
-v /MyDockerData/nginx/conf:/etc/nginx \
-v /MyDockerData/nginx/log:/var/log/nginx \
-d nginx
方法3:vim
容器当前状态:容器处于运行状态,有网络
操作位置:在容器中操作
进入到容器内,安装编辑工具
# ubuntu操作系统安装方式(要有网)
apt install vim
# centos系统安装方式(要有网)
yum install vim
方法4:echo
容器当前状态:容器处于运行状态,无网络
操作位置:在容器中操作
如果会使用linux三剑客,就会更便捷
# 向文件中插入文字
echo "hello world" >> ceshi.txt
# 替换文本中的字符串:
sed 's/books/BOOKS/' ./test.php
# 直接编辑文件 选项-i ,会匹配 file 文件中每一行的所有 book 替换为 books:
sed -i 's/book/books/g' 文件名称
评论 (0)