如何在使用 shell 访问 Docker 容器后编辑文件?
创建 Docker 镜像时,需要指定镜像的构建上下文。镜像构建上下文包含您希望包含在该镜像容器内的所有文件。这包括应用程序的源代码、Dockerfile、其他系统文件等。使用 Docker build 命令指定构建上下文的位置后,即可构建镜像。
此外,您可以使用 Dockerfile 中的 COPY 指令,甚至 Docker cp 命令将文件从本地计算机复制到容器内。但是,如果您想编辑容器内的文件怎么办?简单来说,您可能已经访问了容器的 shell 或 bash,并且想要编辑容器内的文件。在本文中,我们将详细讨论如何做到这一点。
首先,您需要创建一个镜像,以便在创建与该镜像关联的容器时,可以访问容器内的文本文件。有两种方法可以实现这一点:您可以直接在 Dockerfile 中使用 COPY 指令,也可以直接在容器内创建文件。
让我们创建并运行一个 Ubuntu 容器。
$ docker run -it --name=mycont ubuntu /bin/bash
在上面的 Docker run 命令中,我们使用了 -i 和 -t 选项,分别代表交互式和伪终端 (PSTY)。这些选项允许我们通过提供输入来与容器交互。接下来,我们使用了 /bin/bash 命令,该命令设置在容器启动时立即执行的默认命令。因此,当我们运行上述命令时,我们将可以访问 Ubuntu 容器的 Bash。
您甚至可以通过列出所有活动容器来验证容器是否正在运行。保持此容器的 Bash 在终端中运行,打开一个新的终端并执行以下命令。
$ docker ps
您会发现您创建的 mycont 容器正在运行。
一旦您可以访问容器的 Bash,您就可以像与 Linux/Ubuntu 终端交互一样与其交互。要创建文件,我们可以使用 touch 命令。
您可以在容器的 bash 中执行此命令。
# touch tutorialspoint.txt
要验证文件是否已创建,您可以列出所有内容。
# ls
如果您想在容器内编辑文件,您需要访问文件编辑器。您可以使用 nano 或在容器内安装 vim 包。执行此操作之前,请确保更新容器。
# apt-get -y update
现在,您可以使用以下命令安装 vim 包。
# apt-get -y install vim
现在,使用 vim 编辑器打开文件。您可以使用以下命令执行此操作。
# vi tutorialspoint.txt
要在文件中插入内容,您需要调用插入模式。只需按下键盘上的 i 键即可。接下来,输入您想要的内容。要保存内容,请按 Esc 键退出插入模式,输入 :q,然后按 Enter 保存并退出。
要验证,请使用 cat 命令打印文件中的内容。
# cat tutorialspoint.txt
这样,您就可以使用任何您选择的编辑器来编辑容器内的文件。
如果您已经在后台运行一个容器,您甚至可以使用 Docker exec 命令来访问容器的 bash。
$ docker exec -it <container-name> bash
重复上述步骤来创建和编辑文件。
另一种方法,也可能是更好的方法,是使用 Dockerfile 直接安装 vim 编辑器。您可以使用 RUN 指令来执行此操作。让我们来看看。请参考下面的 Dockerfile。
FROM ubuntu:latest WORKDIR /app COPY . . RUN ["apt-get", "-y", "update"] RUN ["apt-get", "install", "-y", "vim"]
默认情况下,拉取 Ubuntu 镜像时不会找到任何文本编辑器。因此,您需要手动安装。COPY 指令将从主机当前目录复制容器默认工作目录中的所有文件。在此 Dockerfile 上执行 Docker build 命令构建镜像后,您可以使用 Docker run 命令运行容器。
$ docker run -it --name=mycont <镜像名称> bash
这样,您就可以访问已安装 vim 编辑器的容器的 bash。
To conclude, in this article, we discussed how to create and edit a file inside a Docker container if you have access to the container’s shell. You can use the Docker run command if you don’t have a container or the Docker exec command if you already have a container running. You can install any text editor that you prefer.

