Запускайте контейнеры Docker при входе в систему под Windows

Я только что настроил новую машину для разработки Windows 10, и, чтобы свести к минимуму проблемы с установкой, у меня есть различные зависимости для разработчиков (Oracle, MongoDB, RabbitMQ, HAProxy и т. д.), работающие под Docker с использованием сценария создания докеров.

Я хотел бы автоматически запускать эти контейнеры при входе в систему Windows, но пока не придумал, как это сделать; простой скрипт, который выполняет docker-compose up -d в правильном каталоге, должен это сделать, но если он выполняется сразу при входе в систему, Docker еще не запущен, поэтому скрипт не работает. Кто-нибудь знает, как программно дождаться запуска докера?


person Henry Wilson    schedule 12.04.2017    source источник
comment
Разве не было бы решением инициализировать рой только с вашей машиной разработки в качестве узла, а затем объявить службы с 1 репликой. Таким образом, Docker будет автоматически поддерживать доступность как минимум 1 контейнера. Это также должно работать после перезагрузки.   -  person WillemdeKok    schedule 13.04.2017


Ответы (2)


Чтобы уточнить мой комментарий, я провел небольшой тест со службой веб-сервера, но он должен работать для любой службы, если вы настроите ее так, как хотите.

Это довольно легко настроить с помощью следующих команд:

docker swarm init

Тогда, например, веб-сервер

docker service create --name webserver --publish 80:80 httpd

Или даже базу данных

docker service create --replicas 1 --name database --publish 1433:1433 -e "ACCEPT_EULA=y" -e "SA_PASSWORD=test" microsoft/mssql-server-linux

Они автоматически перезапускаются после перезагрузки и фатальных сбоев из-за запрошенного количества реплик (по умолчанию 1), которые Docker swarm поддерживает для вас.

Надеюсь, это может чем-то помочь!

person WillemdeKok    schedule 13.04.2017
comment
Я уверен, что это сработает, но на самом деле я нашел способ сделать это без введения роя, см. Другой ответ... - person Henry Wilson; 13.04.2017

Оказывается, этого очень легко добиться с помощью docker-compose с помощью restart! Изменили файл компоновки следующим образом:

version: '2'
    services:
        rabbitmq:
            image: rabbitmq:3.6-management
            ports:
                - "5672:5672"
                - "15672:15672"
            volumes:
                - /var/lib/rabbitmq
            restart: unless-stopped

Эта дополнительная директива restart означает, что если контейнер не был явно остановлен, он запустится с докером при входе в систему/перезагрузке. Проверено и работает!

person Henry Wilson    schedule 13.04.2017