Amazon web services 尝试在Amazon ECS上的端口22上运行自定义SFTP服务时出现问题

Amazon web services 尝试在Amazon ECS上的端口22上运行自定义SFTP服务时出现问题,amazon-web-services,amazon-ec2,Amazon Web Services,Amazon Ec2,我已经构建了一个Node.js应用程序,它实现了一个SFTP服务器;当文件放入服务器时,应用程序会解析数据,并在数据到达时通过API将其加载到Salesforce实例中。该应用程序在Docker容器中运行,并侦听端口9001。我希望它在Amazon的EC2容器服务上运行,在标准端口22上监听。我可以在本地运行它,将9001重新映射到主机22,并且工作正常。但是因为SSH也使用22,所以我在ECS上运行它的运气不好。以下是我迄今为止采取的步骤: 使用AMIamzn-AMI-2016.03.j-a

我已经构建了一个Node.js应用程序,它实现了一个SFTP服务器;当文件
放入服务器时,应用程序会解析数据,并在数据到达时通过API将其加载到Salesforce实例中。该应用程序在Docker容器中运行,并侦听端口9001。我希望它在Amazon的EC2容器服务上运行,在标准端口22上监听。我可以在本地运行它,将9001重新映射到主机22,并且工作正常。但是因为SSH也使用22,所以我在ECS上运行它的运气不好。以下是我迄今为止采取的步骤:

  • 使用AMI
    amzn-AMI-2016.03.j-amazon-ecs-optimized(AMI-562cf236)
    创建了一个EC2实例
  • 将实例分配给允许端口22(已存在)的安全组
  • 创建了一个ECR注册表,并将我的Docker映像推到它上面
  • 已为映像创建ECS任务定义,其中包含从主机端口22到容器端口9001的端口映射
  • 为任务创建了服务,并与默认ECS群集关联,该群集包含我的EC2实例
此时,在查看服务视图的“事件”选项卡时,我看到以下错误:

服务SFTP_测试_服务无法放置任务,因为没有容器实例满足其所有要求。最接近的匹配容器实例XXXX已在使用任务所需的端口。有关更多信息,请参阅疑难解答部分

我假设这是因为我的任务定义试图映射为SSH保留的主机端口22,所以我尝试创建一个新版本的任务定义,将9001映射到9001。我还更新了我的安全组以允许端口9001访问。这个任务是在我的实例上启动的,我能够连接和上传文件。因此,现在我知道Node.js应用程序和Docker实例是正确的。这是一个端口映射问题

在尝试解决端口映射问题时,我找到了,并使用那里的答案将我的sshd更改为在端口9022上运行。我还更新了安全组以允许9022端口上的流量。这起作用了;我现在可以SSH到端口9022,但我不能再SSH到端口22

但是,我仍然得到
最接近的匹配容器实例XXXX已经在使用所需的端口
错误。我还尝试编辑安全组,将默认端口22授权从“SSH”更改为“自定义TCP规则”,但这一更改没有坚持下去;我也不相信这是一种快速选择正确端口的方法

当我从集群屏幕查看容器实例时,我可以看到5个端口“已注册”,包括端口22:

根据,这些端口是ECS代理“默认保留”的。我猜这就是ECS拒绝在EC2实例上启动Docker映像的原因。那么这是可配置的吗?我是否可以“取消保留”端口22以允许Docker映像运行

编辑添加:审阅后,我也打开了