Docker 容器为运行应用程序提供了隔离环境,确保了一致性和可移植性。在使用 Docker 容器时,能够检查和连接到它们的外壳至关重要。这样做可以让您执行命令、排除故障并实时监控容器的行为。
本文将探讨如何访问本地和远程 Docker 容器进行维护和更新。
为什么需要接触容器
访问容器对于在容器化环境中进行有效管理和故障排除至关重要。通过它,您可以分析容器的日志和运行时信息,并轻松识别和解决错误。
通过访问容器,还可以执行命令进行快速配置更新、软件包安装和其他管理任务。如果没有访问权限,你就必须用更新的配置重建整个容器映像,这可能既耗时又低效。
容器还必须能够在分布式应用生态系统中相互通信。因此,您需要访问容器来诊断命令,并确保容器之间的连接是健康的。
虽然可以通过传统的安全外壳(SSH)协议访问容器,但 Docker 提供了几种内置方法来帮助您节省时间和提高效率。这些方法包括:
docker exec
docker run
docker attach
docker compose exec
docker compose run
每种方法都有其特定的使用情况和优势。了解适合您的使用案例的正确命令,可以帮助您优化方法。
如何以及为什么使用 docker exec
docker exec
允许你访问正在运行的容器的 shell 会话并执行命令,而无需启动一个新实例。需要注意的是,这个命令不是持久性的,也就是说,如果容器关闭或重启,它不会重新运行。
要访问一个正在运行的容器,你需要知道它的名称或 ID(可以通过运行 docker ps -a
获取)。然后,把它输入到下面的命令中:
docker exec -it /bin/bash
使用 docker exec 访问容器
如何以及为什么使用 docker run
docker run
命令允许你启动一个新容器,并立即访问它的 shell。默认情况下,这个容器不会附加到当前的 shell 会话,但你可以使用 -it
选项来附加它。
以下命令允许你启动一个新容器,将其附加到当前 shell 会话,并生成一个 bash shell:
docker run -it /bin/bash
使用 docker run 访问容器
如何以及为何使用 docker attach
docker attach
命令对于监控和调试容器运行非常有用。它允许你连接到正在运行的容器,并实时查看其标准输入、输出和错误流。
要使用它,请使用 docker run
启动容器。然后,按 Ctrl+P 和 Ctrl+Q 从容器中分离。你也可以为该容器提供 -d
标志。
容器在后台运行后,可通过以下命令访问它:
docker attach
使用 docker attach 访问容器
如何以及为何使用 Docker Compose
Docker Compose 使您能够创建和执行多容器 Docker 应用程序。您可以用它在 YAML 文件中定义组成应用程序的服务,然后使用该文件一起启动和管理所有容器。它适用于需要快速启动复杂环境的开发和测试环境。
要访问已在运行的特定容器,请运行以下 docker compose
命令,然后输入服务名称和要运行的命令:
docker compose exec app /bin/bash
该命令会在容器内启动一个新进程,运行指定的命令。你可以用它在容器内运行任何命令,包括像 bash 这样的交互式 shell。
同样,如果你想使用 Docker Compose 启动一个新容器并立即访问它,请运行以下命令:
docker compose run app /bin/bash
请注意, docker compose
有两种不同的语法: docker-compose
(版本 1)和 code>docker compose(版本 2)。版本 2 的语法更灵活、更强大,因此建议尽可能使用它。
使用 Docker Compose 访问容器
如何在 Docker 容器中添加 SSH 服务器
在 Docker 容器中添加 SSH 服务器有助于管理容器化应用程序并排除故障。通过 SSH 服务器,您可以从任何地方远程访问和管理容器、执行命令和检查日志。
你可以在构建容器前将 SSH 服务器添加到 Dockerfile 中,然后用 SSH 客户端连接它。或者,你也可以通过在运行中的容器内生成一个 shell 并在其中安装 SSH 服务器来添加临时 SSH 访问。
在构建 Docker 容器时加入 SSH 服务器
在构建 Docker 容器时,如果希望持续 SSH 进入容器,在容器内包含 SSH 服务器会很有用。它允许在开发或故障排除期间对容器进行远程访问和调试。在容器内安装 SSH 服务器还可以安全地将文件传输到容器或从容器中传输出去。
要在构建时加入 SSH 服务器,只需对容器的 Dockerfile 做一些修改。下面是一个包含 SSH 服务器的 Dockerfile 示例:
FROM debian:latest RUN apt-get update && apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN echo 'root:root123' | chpasswd RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
使用 SSH 服务器构建的 Docker 容器
这段代码使用最新的 Debian 映像构建一个容器,并安装 SSH 服务器。它还会为 SSH 服务器创建一个新目录,设置根密码,并通过 SSH 配置启用根登录。
最后,它还公开了 SSH 的默认端口 22。
要使用这个 Dockerfile,先用 docker build
命令构建容器,然后用 docker run
运行容器。下面是一个例子:
docker build . -t ssh-container docker run -d -p 2222:22 ssh-container
此命令使用 Dockerfile 构建一个容器,并将其标记为 ssh-container。使用 -d 以分离模式运行容器。然后,用 -p 将容器内的端口 22 映射到主机上的端口 2222。
容器运行后,你可以使用 ssh
命令 SSH 登录:
ssh root@localhost-p 2222
提示输入密码时,请键入在 YAML 文件中设置的密码。在本例中,密码是 “root123″。现在,你已连接到容器内运行的 SSH 服务器。这意味着你可以执行远程调试或在容器之间传输文件。
为运行中的 Docker 容器临时添加 SSH 服务器
你还可以使用 docker exec
命令为运行中的容器添加 SSH 服务器:
docker exec <container_name_or_id> /bin/bash
获得容器访问权限后,安装 OpenSSH 服务器并启动 SSH 守护进程:
apt update && apt install openssh-server && /usr/sbin/openssh -D
这将在容器内打开 SSH 服务器的新实例。现在你可以使用本地计算机上的 SSH 客户端连接到它了。
请注意,只有您或您的团队在执行或构建阶段暴露了 SSH 端口,您才能通过 SSH 连接到容器。
连接到容器的 SSH 服务器
首先从容器管理平台或服务中确定容器的 IP 地址或主机名。
要连接到 IP 地址,请使用 ssh
命令:
ssh [username]@[container-ip-address]
出现提示后,输入指定用户名的密码。某些 SSH 服务器可能会使用基于密钥的安全性来代替密码。
现在你应该有一个连接到容器的远程终端会话了。
小结
随着 Docker 越来越流行,能够检查环境中运行的容器非常重要。这一功能可让您在开发过程中诊断和解决问题。
Docker 还为各种开发任务提供了一套通用的内置命令。您可以使用这些命令来简化工作流程,而无需依赖传统的 SSH 方法。
评论留言