Ruby on rails 如何使用AWS ECS启用tty并运行交互式控制台?

Ruby on rails 如何使用AWS ECS启用tty并运行交互式控制台?,ruby-on-rails,amazon-web-services,amazon-ec2,docker-compose,amazon-ecs,Ruby On Rails,Amazon Web Services,Amazon Ec2,Docker Compose,Amazon Ecs,在带有AWS ECS服务的EC2实例上部署了停靠Rails应用程序。我使用ecs cli部署rails应用程序,它使用docker compose.yml文件将容器部署为类似于docker compose模式的服务。为了为我的应用程序运行交互式shell(如rails console),我创建了一个具有以下定义的独立服务: version: '2' volumes: app-tmp: driver: local app-logs: driver: local ser

在带有AWS ECS服务的EC2实例上部署了停靠Rails应用程序。我使用
ecs cli
部署rails应用程序,它使用
docker compose.yml
文件将容器部署为类似于
docker compose
模式的服务。为了为我的应用程序运行交互式shell(如
rails console
),我创建了一个具有以下定义的独立服务:

version: '2'

volumes: 
  app-tmp:
    driver: local
  app-logs:
    driver: local

services:
  console:
    image: acc-name.dkr.ecr.us-east-1.amazonaws.com/docker_image_name:latest
    command: bundle exec rails c
    hostname: console
    mem_limit: 314572800
    env_file: ../.prod-env
    tty: true
    stdin_open: true
    ports: []
    volumes:
      - "app-logs:/home/app/log"
      - "app-tmp:/home/app/tmp"
但当我使用以下命令部署任务时:

ecs-cli compose -f docker/docker-compose-console.yml --project-name app-console run console "bundle exec rails c"
忽略标志
tty:true
stdin\u open:true
。由于此原因,任务运行控制台将启动,更改为
运行
状态,然后以0状态静默关闭

是否有任何方法可以运行交互式控制台会话或跟踪日志?使用什么方法来实现类似的行为


TL;DR:我希望行为类似于AWS ECS服务的docker compose run app rails c。

在任务配置中,单击
通过JSON配置
按钮。
将
pseudoTerminal
属性更改为
true

“伪终端”:true

当前无法启动ECS任务并连接到由startup命令创建的分配的TTY会话。这样做似乎有两种选择

  • 像往常一样启动ECS任务,几乎可以使用任何命令来保持容器运行。然后找到任务分配到的实例并将其SSH到该主机中,然后使用
    docker exec
    启动控制台。这种方法的缺点是,当您结束会话时,容器不会退出。完成后,您必须手动结束任务

  • 把容器放在别的地方。如果本地网络可以访问容器所需的所有资源,则可以在本地运行容器。否则,您可以使用EC2实例在VPC内运行容器


  • 那么您实际上如何连接到实例呢?遗憾的是,您实际上无法连接到分配的伪终端。如果没有这些选项,如果您的容器需要分配一个终端会话,它将无法并且将立即停止。启用这些选项后,容器将继续运行指定的任何进程,但您无法连接到它。文档对此一点都不清楚。您找到解决此问题的方法了吗?