【问题标题】:AWS ECS trouble - Running shell script to boot programAWS ECS 故障 - 运行 shell 脚本来启动程序
【发布时间】:2018-07-27 20:43:50
【问题描述】:

我正在尝试在亚马逊 ECS 上运行 Docker 映像。我正在使用一个启动 shell 脚本的命令来启动程序: CMD ["sh","-c", "app/bin/app start; bash"] 为了启动它,因为由于某种原因,当我在后台运行应用程序(elixir/phoenix 应用程序)时,它会立即崩溃,但如果我在前台运行它就可以了。如果我在本地以这种方式运行它,一切正常,但是当我尝试在集群中运行它时,它会关闭。请帮忙!!

【问题讨论】:

  • 在您的开发环境的终端窗口中,如果您运行app start,您会立即返回一个shell 提示符,还是服务器会一直运行直到您使用control-C 停止它?
  • 通常,start 用于在后台启动某些内容。脚本是否提供了不同的子命令,例如run,以将进程保持在前台?
  • 当我使用 start using “docker run -d app” 在我的终端中运行应用程序发布时,它会立即崩溃,让我没有可恢复的日志或任何正在运行的容器。如果我在 Dockerfile 中的 CMD 为 “sh”,”-c”,”app/bin/app start; 运行上面相同的命令; bash” 它可以工作,但如果 Dockerfile 中的 CMD 只是 app/bin/app start
  • 所以 sh -c 方法在本地工作,但是当我尝试在 ECS 中运行它时崩溃

标签: shell amazon-web-services docker elixir amazon-ecs


【解决方案1】:

Docker 应该跟踪您正在运行的前台进程,如果进程停止,则容器停止。当您使用带有“bash”的命令时您的容器工作的原因是因为 bash 没有停止。

我猜你使用 shell 脚本来启动一个在后台服务的应用程序,比如 nginx 或守护进程。因此,请尝试找到一个选项,使应用程序在前台运行将使您的容器保持活动状态。即 nginx 在启动“守护程序关闭”时有一个选项

【讨论】:

    【解决方案2】:

    由于某种原因,当我在后台运行应用程序(elixir/phoenix 应用程序)时,它立即崩溃

    所以你有一个损坏的应用程序,你正在寻找一个组合来让它看起来有点工作。这根本不是一种可靠的方法。

    相反,您应该:

    • 让它在后台运行
    • 使用 systemctlupstart 管理 Erlang VM 在崩溃时的重启

    请注意,在哪里编译应用程序很重要。它必须是与生产版本完全相同的架构/容器,具有相同的 Erlang、Elixir、OS 版本,否则没有人保证它会健壮甚至可以正常工作。

    【讨论】:

    • 有趣的是,当我在容器外部的后台本地运行生产应用程序时,它运行良好。只有当我尝试在 docket 容器中运行后台进程时才遇到问题并求助于 shell 脚本。
    • 要在 docker 中运行它,您必须在同一个 docker 中编译它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多