如何在 shell 到 Docker 容器后编辑文件?

在创建 Docker 镜像时,您需要为镜像指定构建上下文。图像构建上下文包含您希望包含在您将来自该图像的容器中的所有文件。这包括您的应用程序的源代码、Dockerfile、其他系统文件等。一旦您使用 Docker build 命令指定了构建上下文的位置,您就可以构建映像。

此外,您可以使用 Dockerfile 中的 COPY 指令甚至 Docker cp 命令从本地机器复制容器内的文件。但是如果你想编辑容器内的文件怎么办?简而言之,可能会出现您访问了容器的 shell 或 bash 并且想要编辑容器内的文件的情况。在本文中,我们将具体讨论如何做到这一点。

首先,您需要先创建一个图像,以便在创建与该图像关联的容器时,您可以访问容器内的文本文件。有两种方法可以这样做。您可以直接在 Dockerfile 中使用 COPY 指令,也可以直接在容器内创建文件。

让我们创建并运行一个 Ubuntu 容器。

$ docker run -it --name=mycont ubuntu /bin/bash

在上面的 Docker 运行命令中,我们使用了 -i 和 -t 选项,它们代表交互式和伪 TTY。这些选项允许我们通过提供输入与容器进行交互。接下来,我们使用了 /bin/bash 命令,该命令设置了在容器启动后立即执行的默认命令。因此,当我们运行上述命令时,我们将可以访问 ubuntu 容器的 bash。

您甚至可以通过列出所有活动容器来验证容器是否正在活动。保持这个容器 bash 在终端中运行,打开一个新终端并执行以下命令。

$ docker ps

您会发现您创建的 mycont 容器正在积极运行。

一旦您可以访问容器的 bash,您就可以像与 Linux/Ubuntu 终端交互一样与它进行交互。要创建文件,我们可以使用 touch 命令

您可以在容器的 bash 中执行此命令。

# touch nhooo.txt

要验证文件的创建,您可以列出所有内容。

# ls

如果要编辑容器内的文件,则需要访问文件编辑器。您可以使用 nano 或在容器内安装 vim 包。在执行此操作之前,请确保更新容器

# apt-get -y update

现在,您可以使用以下命令安装 vim 包。

# apt-get -y install vim

现在,使用 vim 编辑器打开该文件。您可以使用以下命令来执行此操作。

# vi nhooo.txt

要在文件中插入内容,您需要调用插入模式。只需按键盘上的 i 键。接下来,输入您想要的任何内容。要保存内容,按退出键退出插入模式,输入:q,然后按回车键保存并退出。

要验证,请使用 cat 命令打印文件中的内容。

# cat nhooo.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 <image name> 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.