V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
moodasmood
V2EX  ›  程序员

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

  •  
  •   moodasmood · 2019-07-04 14:55:42 +08:00 · 13717 次点击
    这是一个创建于 2002 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    如果不是应该是你的容器没在运行?
    senghoo
        17
    senghoo  
       2019-07-04 16:48:31 +08:00   ❤️ 1
    @moodasmood
    如果是 docker for Mac
    ```
    screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
    ```
    可以进入虚拟机的终端(可能路径稍微不一样。特别是 0 那个,应该是编号)。在进入到对应目录里,
    虚拟机里没 vim,但是至少有 vi 可以用。
    moodasmood
        18
    moodasmood  
    OP
       2019-07-04 16:55:49 +08:00
    @senghoo 确实是 mac,感谢
    shawndev
        19
    shawndev  
       2019-07-04 19:52:16 +08:00
    不要问,问就是 VSCode Remote Development
    CivAx
        20
    CivAx  
       2019-07-05 09:36:04 +08:00
    如果这是你自己打 Dockerfile 建立的镜像,建议你自己维护一个 basic 镜像,在 basic 里面预先运行各类 RUN apt-get 命令装好需要的环境,然后再 FROM basic:0.1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3315 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:43 · PVG 08:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.