Как я могу запускать команды конфигурации после запуска в Docker?

У меня есть Dockerfile, настроенный для запуска службы, которая требует запуска некоторых последующих команд для правильной инициализации. Я создал сценарий запуска со следующей структурой и установил его в качестве точки входа:

  1. Установите переменные среды для службы, создайте сертификаты и т. д.
  2. Запустите службу в фоновом режиме.
  3. Запустите команды конфигурации, чтобы завершить инициализацию службы.

Очевидно, что это не работает, так как служба была запущена в фоновом режиме, и сценарий точки входа завершится с кодом 0. Как я могу сохранить этот контейнер работающим после завершения настройки? Можно ли сделать это без запущенного цикла занятости?


person DaveStance    schedule 18.05.2017    source источник


Ответы (2)


Как я могу сохранить этот контейнер работающим после завершения настройки? Можно ли сделать это без запущенного цикла занятости?

Среди множества вариантов:

  • Используйте что-то вроде sleep inf, который не является занятым циклом и не потребляет процессорное время.
  • Вы можете использовать диспетчер процессов, например supervisord, чтобы запустить службу и запустить сценарий конфигурации.
  • Вы можете запускать команды конфигурации в отдельном контейнере после запуска сервисного контейнера.
person larsks    schedule 18.05.2017

Вы можете просмотреть эту проблему GitHub и конкретный комментарий — https://github.com/docker-library/wordpress/issues/205#issuecomment-278319730

Подводя итог, вы делаете что-то вроде этого:

version: '2.1'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
  wordpress:
    image: wordpress:latest
    volumes:
     - "./wp-init.sh:/usr/local/bin/apache2-custom.sh"
    depends_on:
      db:
        condition: service_started
    ports:
    - 80:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_PASSWORD: wordpress
    command: 
    - apache2-custom.sh

wp-init.sh — это место, где вы пишете код для выполнения.

Обратите внимание на тег command yml:

command: 
    - apache2-custom.sh

поскольку мы ограничили их в теге volumes, он фактически запустит код в wp-init.sh в вашем контейнере.

person ofekp    schedule 25.08.2018