如何在我 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 选项,它们分别代表交互式和伪终端。这些选项允许我们通过提供输入来与容器进行交互。接下来,我们使用了 /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 <image name> bash
这样做,您将能够访问容器的 bash,并且已经安装了 vim 编辑器。
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.