docker 里面用什么命令修改配置文件?

2019-07-04 14:55:42 +08:00
 moodasmood

docker 里面有个配置想改一下,exec 进去后发现 vi/vim/nano 通通没有,请问这种情况还有啥文本编辑工具吗?

13717 次点击
所在节点    程序员
20 条回复
yuhr123
2019-07-04 14:58:20 +08:00
一,cp 进来 改 cp 回去
二,-v 做目录映射
no1xsyzy
2019-07-04 15:02:10 +08:00
ed? awk?
总之先 ls /bin 看一下吧
andyangyu
2019-07-04 15:03:54 +08:00
没有就 apt/yum/apk 装一个?
guyeu
2019-07-04 15:05:22 +08:00
最好不要在 docker 里修改文件;
如果要修改的配置文件是从外部挂载进去的,直接去挂载点修改那个文件就可以;
如果要修改的配置文件是 docker 镜像里的,不要修改容器里的文件,因为销毁掉这个容器重启一个的话,之前的修改就会丢掉。确实需要修改,应该基于这个镜像自己 build 一个镜像去修改。
如果只是临时修改,那把外部的一个文件挂载到那个位置就可以了。
PerpetualHeng
2019-07-04 15:06:09 +08:00
1.不要在容器起来后做配置文件的修改,没有这么玩的。
2.提前准备一个你改好的配置文件,打镜像的时候,直接在镜像层面新的配置文件替换旧的配置文件就行了,然后启动。
3.不用配置文件,所有配置走环境变量,配置也等于提前放进容器。
moodasmood
2019-07-04 15:14:56 +08:00
@PerpetualHeng
@guyeu

道理我都懂,但是平时开发用的,自己 build 或者挂载太麻烦了呀,自己进去改一行完事,多方便[捂脸]
yoohwzy
2019-07-04 15:20:28 +08:00
可以用

cat > /file_path << \EOF
file content
EOF
youngxu
2019-07-04 15:22:34 +08:00
echo xxx > xxx
STRRL
2019-07-04 15:24:29 +08:00
我现在的做法是 搞个脚本 docker cp busybox 进去
然后 docker exec 开始改东西
然后删掉 busybox
senghoo
2019-07-04 15:26:43 +08:00
虽然不建议用。执行:

```
docker inspect --format='{{.GraphDriver.Data.MergedDir}}' 容器 ID 或名字
```

会返回容里根目录对应的宿主机路径。 可以直接进去编辑。。
aaa5838769
2019-07-04 15:29:19 +08:00
我建议挂载一个目录,把你要修改的文件,进行编写覆盖,然后重新启动容器就可以。
BCy66drFCvk1Ou87
2019-07-04 15:37:54 +08:00
能挂载目录的挂载目录,不行的只能进去安装 vim/nano 等编辑器直接改了,有时候还真得这么做,比如碰到一些无法挂载的文件如.sh
limuyan44
2019-07-04 15:39:32 +08:00
挂载,楼上应该已经说完了
letitbesqzr
2019-07-04 15:46:25 +08:00
@senghoo #10

get 新技能,虽然不建议,但的确很实用。
moodasmood
2019-07-04 15:49:38 +08:00
@senghoo 是这样用的吗 docker inspect --format='{{.GraphDriver.Data.MergedDir}}' 434909d2327d,
返回 /var/lib/docker/overlay2/f14e714cac42380e004676d6622a84b853660c1a5f9a96e62c321fbca3d9f146/merged
但是目录不存在
senghoo
2019-07-04 16:39:18 +08:00
@moodasmood 你是用 docker for Mac 之类的吧。
如果是的话,docker for Mac 是在你 Mac 里跑一个虚拟机。 这个路径是虚拟机里的路径。所以可能用不了。

如果不是应该是你的容器没在运行?
senghoo
2019-07-04 16:48:31 +08:00
@moodasmood
如果是 docker for Mac
```
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
```
可以进入虚拟机的终端(可能路径稍微不一样。特别是 0 那个,应该是编号)。在进入到对应目录里,
虚拟机里没 vim,但是至少有 vi 可以用。
moodasmood
2019-07-04 16:55:49 +08:00
@senghoo 确实是 mac,感谢
shawndev
2019-07-04 19:52:16 +08:00
不要问,问就是 VSCode Remote Development
CivAx
2019-07-05 09:36:04 +08:00
如果这是你自己打 Dockerfile 建立的镜像,建议你自己维护一个 basic 镜像,在 basic 里面预先运行各类 RUN apt-get 命令装好需要的环境,然后再 FROM basic:0.1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/579994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX