Docker 容器中使用 SSH 远程调试

在开发 Web 应用时,开发人员经常需要在不同的环境中进行调试和部署。因此,Docker 已经成为了一个非常有用的容器技术,可以轻松地构建和部署应用,同时保证了应用程序的可移植性。

然而,实际应用中的问题不总是那么简单。在某些情况下,我们需要在 Docker 容器中执行调试工作,以便更好地诊断和解决问题。在这种情况下,我们可以使用 SSH 远程调试工具,在 Docker 容器中操作主机。

本文将介绍如何在 Docker 容器中使用 SSH 远程调试。下面将从以下几个方面进行详述:

  1. 安装和配置 OpenSSH Server
  2. 将容器配置为 SSH 客户端
  3. 从本地 SSH 访问容器
  4. 使用 VS Code 进行远程调试

1. 安装和配置 OpenSSH Server

要使用 SSH,我们需要安装和配置 SSH 服务器。在 Ubuntu 系统中,我们可以使用以下命令安装 OpenSSH:

sudo apt-get install openssh-server

安装完 OpenSSH 服务器后,我们需要为我们的 SSH Server 生成 SSH 密钥,以用于身份验证。

ssh-keygen -t rsa -b 4096

这会生成两个密钥:私钥和公钥。请勿向任何人共享私钥,以确保您的安全。而将公钥放在服务器上,以便客户端进行访问。

cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

2. 将容器配置为 SSH 客户端

接下来,我们需要将 Docker 容器配置为 SSH 客户端。在 Dockerfile 中,加入以下内容:

RUN apt-get update && apt-get -y install openssh-client

然后,我们可以通过运行以下命令创建一个包含 SSH 客户端的 Docker 容器:

docker run -d -p 2222:22 --name <container-name> <image-name>

该命令在容器中创建了一个 SSH 客户端,它将监听主机的 2222 端口,并将端口转发到容器的 22 端口。

3. 从本地 SSH 访问容器

现在容器已经作为 SSH 客户端配置完毕,我们可以开始从本地主机访问容器。

首先,我们需要找到容器的 IP 地址。可以使用以下命令获取:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-name>

这将返回容器的 IP 地址,例如 172.17.0.2

然后,我们可以从本地主机使用以下命令连接到容器:

ssh root@172.17.0.2 -p 2222

当我们运行此命令时,我们将与容器建立 SSH 连接,并登录容器。

此时我们已经成功连接到了 Docker 容器中,我们就可以如在本地主机一样使用 SSH。例如,我们可以通过在容器中执行以下命令来退出 SSH:

exit

4. 使用 VS Code 进行远程调试

现在我们已经知道如何从本地主机访问 Docker 容器中的 SSH,我们可以了解如何使用 Visual Studio Code 进行远程调试。VS Code 具有内置的远程开发功能,可以轻松地与远程计算机进行连接,并在其中运行和调试应用程序。

首先,我们需要在本地主机上安装 SSH 用户插件。在插件商店中搜索和安装 "Remote Development" 插件。安装完成后,重新启动 Visual Studio Code。

接下来,我们需要在主机上创建一个 SSH 配置文件,该文件将连接到我们 Docker 容器中的 SSH 服务器。在本地主机上创建一个名为 ~/.ssh/config 的文件,并在其中添加以下内容:

这将创建一个名为 “docker”的主机配置,该配置包括 SSH 连接的 IP 地址、用户名和端口。

最后,我们可以在 VS Code 中打开我们的项目,并通过“命令面板”选择 "Remote-SSH: Connect to Host" 命令。选择 "docker" 配置,等待连接完成。完成后,我们就可以在 Docker 容器中运行和调试应用程序了。

注意:请确保先在 Docker 容器中安装了调试器,并将端口暴露到宿主机。例如,如果您正在使用 Node.js,可以使用以下命令在 Docker 容器中安装和启动调试器:

npm install -g ndb
ndb app.js

然后我们就可以在 VS Code 中使用调试器远程调试了。

总结

使用 SSH 远程调试,使得我们可以在 Docker 容器中开发和调试应用程序,无需将其安装在本地开发环境中。这不仅可以显着降低应用程序开发的时间成本,还可以提高可移植性和部署灵活性。希望本文对你对 Docker 容器中使用 SSH 远程调试有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a5f662add4f0e0ffe8f712


纠错反馈