在 Docker 容器内编辑文件

Posted

技术标签:

【中文标题】在 Docker 容器内编辑文件【英文标题】:Editing Files inside of a Docker Container 【发布时间】:2018-05-09 11:22:54 【问题描述】:

如何编辑已下载到主机上的 docker 容器内的配置文件?

我正在使用this tutorial,但我不确定在哪里可以找到和编辑 traefik.toml 文件

【问题讨论】:

这能回答你的问题吗? How do I edit a file after I shell to a Docker container? 【参考方案1】:

有多种方法可以实现:

可以通过运行命令进入容器:

docker exec -it <container-name> bash

请注意,根据容器的不同,您可能没有简单的文本编辑器..


另一种选择是通过运行将要编辑的文件从容器复制到主机上:

docker cp <container-name>:/path/to/file/in/container .

编辑文件,然后将其复制回容器中:

docker cp <file> <container-name>:/path/to/file/in/container

第三个选项是创建一个bind mount,它将有效地将文件从容器暴露到主机上

docker run -v $(pwd)/files:/dir/containing/file/in/container ...

这样会暴露“files”目录下的container文件夹,可以在host中编辑文件,直接反映到container内部。

【讨论】:

你有我的支持,但重要的是要注意,选项 1 不适用于 traefik 容器,这是有问题的。例如,您甚至无法执行docker exec -it &lt;container-name&gt; /bin/sh,它为您提供了容器的默认外壳。我稍微确信(虽然无法完全解释)它没有任何你可以执行的 shell 来执行任何形式的docker exec -it 你可能是对的。 traefik镜像是基于scratch的 第三个选项将一个文件夹从主机绑定到容器中,而不是相反。【参考方案2】:

我遇到了同样的问题,并找到了一个很好的方法来处理这个问题。使用 VS Code 和 docker 扩展,让容器运行。在容器列表中,右键单击要编辑的容器。选择:附加 Visual Studio 代码。

应该打开另一个直接附加到容器的 VS Code 实例。单击打开文件夹并导航到要编辑的文件。倒一杯好喝的黑啤酒,冷静片刻,然后继续编码。 :)

【讨论】:

这适用于 Windows 容器吗?获取用户名/密码错误。 这个 VS Code 特性的文档是available here btw。但是,您的扩展程序不会继续使用,需要将它们安装在容器内。 注意需要安装VS代码扩展Remote - Containers marketplace.visualstudio.com/…【参考方案3】:

是的,也适用于 Windows 容器。

    在崩溃的容器中运行 cmd 以防止退出:

    docker run -dit docker/image cmd

    使用 docker 扩展启动 VS Code。每个文件都有一个打开和下载的选项,很不错。

【讨论】:

以上是关于在 Docker 容器内编辑文件的主要内容,如果未能解决你的问题,请参考以下文章

docker文件编辑

Docker教程系列六:Docker上部署Nginx

修改docker0默认地址

docker挂载文件删除容器内文件句柄不释放

云原生之使用docker部署ZPan个人网盘系统

Docker - 无法通过脚本删除容器内的文件