【问题标题】:ssh to docker container hosted on EC2ssh 到 EC2 上托管的 docker 容器
【发布时间】:2018-09-28 22:41:13
【问题描述】:

我想在 EC2 上运行一个 docker 容器,并且我需要通过 ssh 进入容器以进行调试。我的 EC2 实例(应用了安全组)上为 ssh 22 和 8022 打开了 2 个端口。问题是当我想将我的 docker 容器的 22 端口绑定到端口 8022 时,它会告诉地址已经在使用中。该地址由 sshd 程序使用。如果我终止该进程,那么我无法从本地主机 ssh 到实例。我该如何克服这个僵局?

【问题讨论】:

  • 您通常不会通过 ssh 连接到容器。 ssh 到主机,sudo docker exec 如果您真的需要交互式 shell。

标签: amazon-web-services docker ssh


【解决方案1】:

如 cmets 中所述,您无需在容器内启动 ssh 即可进入容器。通过运行 ssh 进入 EC2 实例后,您可以使用 docker exec 命令进入容器内部:

docker exec -it <container-name> bash

如果你还想直接ssh到容器中,那么你需要做如下操作:

  1. 启动容器,将里面的22端口映射到外面的空闲端口;

    docker run -p 2222:22 ...

  2. 启动容器后,执行进入容器并安装 ssh(如果尚未安装),然后使用类似 systemctl start sshd 的东西启动 ssh 服务

  3. 通过使用 ec2 实例 IP 和映射端口 ssh 进入容器

    ssh &lt;container-user&gt;@&lt;ec2-instance-ip&gt; -p 2222

这将连接到 ec2 实例并由于端口映射而将您重定向到容器中。

【讨论】:

  • 亲爱的 yamenk,我需要 ssh 到容器中进行 Pycharm 远程调试。我已经按照描述完成了所有操作,但是问题是当我在 aws cloud 中打开一个端口来监听 ssh 时,它已经被实例的 ssd 使用,所以我不能再将它绑定到 docker container ,因为端口是已在使用中。你把我的问题搞错了。
  • @user3338094 这就是为什么您需要将容器内的 ssh 端口映射到实例上不同于 22 的端口。为此,您可以在运行命令中添加-p 2222:22,并将调试器配置为连接到端口 2222 而不是 22。
  • 如果 2222 端口没有监听 sshd,你将如何从本地主机 ssh 到远程服务器?只能通过 ssh 打开端口,然后该端口应该重新连接。
  • @user3338094 docker 中的-p 选项用于映射端口。如果您在内部启动 sshd,则容器在内部侦听端口 22。端口映射会将进入端口2222 的流量重定向到容器内的22。这将允许您直接在容器中打开 ssh 会话。另外需要配置ec2实例的安全组,允许2222端口的流量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2016-09-08
  • 2015-05-10
  • 2020-10-29
  • 2017-01-22
  • 1970-01-01
相关资源
最近更新 更多