首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   moodasmood · 48 天前 · 1803 次点击
    这是一个创建于 48 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    道理我都懂,但是平时开发用的,自己 build 或者挂载太麻烦了呀,自己进去改一行完事,多方便[捂脸]
        7
    yoohwzy   48 天前
    可以用

    cat > /file_path << \EOF
    file content
    EOF
        8
    youngxu   48 天前 via Android
    echo xxx > xxx
        9
    STRRL   48 天前
    我现在的做法是 搞个脚本 docker cp busybox 进去
    然后 docker exec 开始改东西
    然后删掉 busybox
        10
    senghoo   48 天前   ♥ 4
    虽然不建议用。执行:

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

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

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

    如果不是应该是你的容器没在运行?
        17
    senghoo   48 天前   ♥ 1
    @moodasmood
    如果是 docker for Mac
    ```
    screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
    ```
    可以进入虚拟机的终端(可能路径稍微不一样。特别是 0 那个,应该是编号)。在进入到对应目录里,
    虚拟机里没 vim,但是至少有 vi 可以用。
        18
    moodasmood   48 天前
    @senghoo 确实是 mac,感谢
        19
    shawndev   48 天前
    不要问,问就是 VSCode Remote Development
        20
    CivAx   47 天前
    如果这是你自己打 Dockerfile 建立的镜像,建议你自己维护一个 basic 镜像,在 basic 里面预先运行各类 RUN apt-get 命令装好需要的环境,然后再 FROM basic:0.1
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1024 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 18:44 · PVG 02:44 · LAX 11:44 · JFK 14:44
    ♥ Do have faith in what you're doing.