docker-compose держать контейнер работающим после запуска точки входа - PullRequest
0 голосов
/ 02 декабря 2018

Мой docker-compose.yml

version: '3.1'
services:
    redis:
      container_name: redis
      image: redis:3.0
    app_prod:
      container_name: app_prod
      build:
        dockerfile: .docker/app/prod.Dockerfile
        context: ./../
      ports:
          - "8080:80"
      links:
        - mysql:mysql
        - redis:redis
      depends_on:
        - mysql
        - redis
      environment:
        PRODUCTION_MODE: 'true'
      entrypoint: .docker/app/sh/entry-point.sh
    mysql:
      image: mysql
      command: --default-authentication-plugin=mysql_native_password
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: 'my-db'
      build:
        context: ./mysql # path to folder containing Dockerfile

Мой .docker / app / sh / entry-point.sh

#!/usr/bin/env bash
set -e # exit script if any command fails (non-zero value)
echo Waiting for redis service start...;

while ! nc -z redis 6379;
do
sleep 1;
done;

echo Waiting for mysql service start...;

while ! nc -z mysql 3306;
do
sleep 1;
done;
echo Connected!;

php www/index.php orm:schema-tool:update --force

exec "$@"

Я строю по команде:

docker-compose -f .docker/docker-compose-prod.yml up -d --build

Все контейнеры построены успешно, но в конце выполняется точка входа скрипт контейнера app_prod ( .docker / app / sh / entry-point.sh ).Сценарий точки входа также был успешно обработан, но после выполнения сценарий точки входа app_prod контейнер остановлен.

Это какой-то способ сохранить работу контейнера?

Спасибо

1 Ответ

0 голосов
/ 02 декабря 2018

Определенно, нет: как только точка входа выходит из контейнера, выходит.

Ваша точка входа - это сценарий оболочки, оканчивающийся на exec "$@" (хорошо!), Что означает, что после того, как он успешно ожидает, пока его базы данных не будут запущены, он будет запускать все, что передано в docker-compose.yml как command:.(Обратите внимание, что если вы объявляете entrypoint: в docker-compose.yml, , он игнорирует CMD в Dockerfile .) Поэтому вам просто нужен command:, который запускает вашу службу, и вы должны установить

entrypoint: .docker/app/sh/entry-point.sh
command: php-fpm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...