如何在正在运行的 Docker 容器上运行命令
通常,我们希望完全包含 Docker 应用程序,但有时出于开发或自动化目的,能够像使用 Linux VM 一样使用 Docker 容器。 Docker 提供了用于在容器内运行命令甚至整个 shell 的工具。
在容器中运行命令
要在容器中运行命令,将需要其容器 ID,除非我们为该容器设置了特定名称。 这是一个长的十六进制字符串,我们可以从 Docker 进程列表中找到:
$ docker ps
然后,我们可以使用 exec -it
命令在容器内运行。 例如,查看日志文件的输出:
$ docker exec -it containerID tail /var/log/nginx/access.log
我们还可以在容器内运行脚本:
$ docker exec -it containerID script.sh
-it
选项分别用于“交互模式”和 TTY,几乎一直使用。 我们可以使用其他一些选项:
- --workdir 或 -w 在命令之前更改当前目录。
- --detach 或 -d 在后台运行命令。
- --env 或 -e 在运行前设置环境变量。
- --env-file 做同样的事情,但处理起来更安全。
- --privileged 以扩展权限运行命令。
- --user 作为不同的用户运行
当然,这只适用于正在运行的容器。 如果想暂停容器进行维护,则需要通过新的镜像版本部署更新,或者从主机操作系统更改卷挂载的数据。
通过 SSH 连接到容器
不仅限于简单的命令,我们实际上可以通过运行 /bin/bash
作为命令来打开 shell。 可能会受到可用工具的限制——大多数容器都具有相当准系统的 Linux 安装——但它使运行许多命令变得更加容易。
$ docker exec -it containerID /bin/bash
这只是一个可从主机访问的 shell,在大多数情况下运行良好。 但是,如果愿意,我们可以将容器设置为通过 SSH 像 VPS 一样完全可用。 可以在 Docker 容器中运行 SSH 服务 的文章中阅读有关设置的更多信息。
将文件复制到容器和从容器拷贝出来
使用 exec -it
运行命令可以工作,但主机和容器之间仍有一层阻止简单的脚本编写。 一方面,虽然向容器发送命令很容易,但从文件系统中获取输出却更难。
虽然可以通过管道将 exec -it 的 STDOUT 传输到主机操作系统上的其他服务,但也可以将文件复制到容器的文件系统或从容器的文件系统拷贝文件。 例如,拉出一个日志文件并将其粘贴到主机上:
$ docker cp container:/var/log/nginx/example.log example.log
或拉出整个目录
$ docker cp nginx:/etc/nginx/ nginxconfig/
但是,如果经常这样做,则可能需要考虑使用绑定或卷挂载来使数据可以直接从主机访问。
相关文章
在 Linux 中托管 Docker Internal
发布时间:2023/04/18 浏览次数:138 分类:Docker
-
Docker 允许开发人员通过将应用程序包装在称为容器的标准化单元中来高效地构建、测试和部署应用程序。 在使用 Docker 容器时,您可能会遇到需要将容器与主机连接的场景。
在 Docker 中设置工作目录
发布时间:2023/04/18 浏览次数:81 分类:Docker
-
在 Docker 中,我们可以通过编辑 Dockerfile 并添加密钥 WORKDIR 来设置我们的工作目录。本文将讨论在 Docker 中更改我们当前和默认的工作目录。
在 Docker 容器中公开多个端口
发布时间:2023/04/18 浏览次数:121 分类:Docker
-
Docker 容器使用端口来实现万维网上不同设备之间的通信。 在本篇文章中,我们将学习如何使用 Nginx 应用程序在 Docker 容器中公开多个端口。
将用户添加到 Docker 容器
发布时间:2023/04/18 浏览次数:186 分类:Docker
-
在本文中,我们将学习如何通过实现返回产品数组的 Express 应用程序将用户添加到 Docker 容器。
使用 Docker 网络主机命令
发布时间:2023/04/18 浏览次数:111 分类:Docker
-
在本文中,我们将学习如何使用 --network 命令将容器添加到主机网络。 如果我们不使用此命令指定网络,我们还将了解如何将容器添加到默认网络。
清除 Docker 容器日志
发布时间:2023/04/18 浏览次数:175 分类:Docker
-
本文介绍了我们可以用来清除 docker 容器中日志的不同方法。日志是应用程序在特定事件或状态发生时记录的信息,它们帮助我们监控应用程序并采取必要的措施。
Dockerfile 中 COPY 和 ADD 命令的区别
发布时间:2023/04/18 浏览次数:156 分类:Docker
-
在 Dockerfile 中,我们可以使用 COPY 或 ADD 命令复制这些文件。 这些命令在功能上是相同的; 但是,存在一些差异。本文介绍了 Dockerfile 中 COPY 和 ADD 命令之间的区别。