Взаимодействуйте с консолью Ruby Padrino с помощью команды Entrypoint в docker -compose - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь запустить консоль Padrino (похожую на консоль Rails).

Вот моя команда ENTRYPOINT в Dockerfile

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

Я хочу запустить консоль, когда Значение переменной env: $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?

EDIT Вот мой 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 Ответ

1 голос
/ 06 мая 2020

Итак, согласно этой проблеме , вы не можете выделить tty в docker -compose, потому что он запускает несколько контейнеров.

Это ожидаемое поведение. вверх не интерактивен. Он может запускать несколько контейнеров, поэтому у вас не может быть одного терминала с открытым стандартным вводом для нескольких контейнеров.

, поскольку в вашем docker -compose есть одна служба, поэтому вы можете попробовать с * Команда 1009 * вместо up

docker-compose run app

или другой вариант - запустить весь контейнер, а затем запустить его с docker attach, но сначала вам нужно

docker-compose -d

затем

docker attach container_name

вам также может потребоваться значение tty флага

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

...