通过docker-compose中的Entrypoint命令与Ruby Padrino控制台进行交互

时间:2020-05-06 11:06:14

标签: ruby docker docker-compose

我正在尝试启动Padrino控制台(类似于Rails控制台)。

这是我在Dockerfile中的ENTRYPOINT命令

ENTRYPOINT /usr/src/app/docker-entrypoint.sh

当环境变量值为$CONSOLE = Y时,我想启动控制台

这是docker-entrypoint.sh脚本

if [ "$CONSOLE" = "Y" ];
then
    echo "Starting Padrino console"
    bundle exec padrino console
else
#something else
fi

但是,当我使用环境变量docker-compose up运行CONSOLE = Y时,控制台开始启动,但以Switch to Inspect mode结尾。我在线上尝试了许多解决方案,尽管docker-compose exec <container-name> bundle exec padrino console可能有效,但它超出了内存,并杀死了控制台进程和容器上运行的服务器。

如何仅通过docker-compose up命令启动控制台?

编辑 这是我的docker-compose.yml文件

version: '3'
services:
  app:
    build: .
    volumes:
    - .:/usr/src/app
    ports:
    - "36081:36081"
    restart: always
    depends_on:
    <other-services>
    container_name: application
    environment:
    - MIGRATE=$MIGRATE
    - CONSOLE=$CONSOLE
  <other-services>  

1 个答案:

答案 0 :(得分:1)

因此根据此issue,您不能在docker-compose中分配tty,因为它启动了多个容器。

这是预期的行为。起来不是互动的。它可以开始 多个容器,因此您不能拥有一个带有 stdin可打开多个容器。

由于docker-compose中只有一项服务,因此您可以尝试使用run命令而不是up

docker-compose run app

或另一个选择是启动所有容器,然后使用docker attach运行 但首先,您需要

docker-compose -d

然后

docker attach container_name

您可能还需要tty标志为true

version: '3'
services:
  app:
    build: .
    tty: true