当前位置:首页 > 编程语言 > 正文内容

如何通过SSH进入Docker容器

a811625533年前 (2023-08-14)编程语言17

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+PCtrl+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/ *** in/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/ *** in/openssh -D

这将在容器内打开 SSH 服务器的新实例。现在你可以使用本地计算机上的 SSH 客户端连接到它了。

请注意,只有您或您的团队在执行或构建阶段暴露了 SSH 端口,您才能通过 SSH 连接到容器。

连接到容器的 SSH 服务器

首先从容器管理平台或服务中确定容器的 IP 地址或主机名。

要连接到 IP 地址,请使用 ssh 命令:

ssh [username]@[container-ip-address]

出现提示后,输入指定用户名的密码。某些 SSH 服务器可能会使用基于密钥的安全性来代替密码。

现在你应该有一个连接到容器的远程终端会话了。

小结

随着 Docker 越来越流行,能够检查环境中运行的容器非常重要。这一功能可让您在开发过程中诊断和解决问题。

Docker 还为各种开发任务提供了一套通用的内置命令。您可以使用这些命令来简化工作流程,而无需依赖传统的 SSH *** 。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://2345hao.cn/blog/index.php/post/8053.html

分享给朋友:

“如何通过SSH进入Docker容器” 的相关文章

什么是Node.js以及为什么要使用它

什么是Node.js以及为什么要使用它

JavaScript是世界上最流行的编程语言之一。今天,它为数百万个网站提供支持,并吸引了成群的开发人员和设计人员为Web构建功能。如果您是编程新手,那么 JavaScript很容易成为之一。 在最初的20年里,JavaScript主要用于客户端脚本。由于JavaScript只能在<scr...

20个最佳Laravel免费和付费教程资源

20个最佳Laravel免费和付费教程资源

Laravel多年来一直是PHP应用程序开发的摇滚明星,这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel,你不需要更进一步。通过浏览本指南,您可以找到最适合您的Laravel教程,与您的知识水平和...

2022年PHP开发人员的平均工资统计报告

2022年PHP开发人员的平均工资统计报告

PHP开发:有些人认为它是,另一些人认为它是一种过时的技术,不值得花时间学习。但是这些数字说明了什么,尤其是当您查看PHP开发人员的薪水时? 虽然肯定有许多更新、更炫、更令人兴奋的语言,但PHP仍然是后端Web开发的可靠主食,也是许多雇主仍在寻找的技能。 有兴趣自己成为PHP开发人员吗?我们...

优化Laravel性能的17种方法

优化Laravel性能的17种方法

您是否正在寻找成功的方法来加快Laravel的性能,同时在您的项目上工作?你来对地方了! Laravel是一个流行的开源PHP框架,以其强大的安全性和简单而复杂的编码架构而闻名。它是构建能够推动收入和推动业务发展的尖端Web应用程序的绝佳选择。 尽管如此,如果你不使用正确的优化技术,Lara...

MariaDB与PostgreSQL之间的14个关键差异

MariaDB与PostgreSQL之间的14个关键差异

数据库本质上是任何软件的支柱。随着市场上的多个数据库以及的日益普及,许多开发人员和企业都有一个共同的担忧:您如何选择合适的? 在本文中,我们将讨论最流行的两个开源数据库——MariaDB和PostgreSQL。 虽然PostgreSQL已经存在了20年并且在稳定性方面非常出色,但MariaD...

如何在Pinterest上添加验证网站以解锁更多功能

如何在Pinterest上添加验证网站以解锁更多功能

Pinterest帮助数百万企业主,但您知道吗,当您了解如何在Pinterest上验证您的网站时,您可以解锁其他一些工具,例如高级分析、访问Pinterest广告和其他Pinterest开发/营销工具? 在Pinterest上“验证”您的网站是一个简单的过程,可以验证您实际上是您网站的所有者,...