Если я "запускаю службу docker-compose" в интерактивном терминале (не -it, а интерактивно, на хосте запущен bash), моя служба успешно инициализируется.
Но если я добавлю эту же команду в сценарий оболочки, она потерпит неудачу.
Я подозреваю, что проблема в разрешении имен через / etc / hosts; кажется, что он работает в интерактивном режиме, но не по какой-либо причине Я хочу, чтобы контейнеры могли видеть имена, определенные в файле / etc / hosts. И хотя я использую Linux Mint 19.1, он мне нужен для работы в Windows, Mac и Linux.
То, что я пробовал, не сработало:
- Добавление снов - до 10 минут
- Проверка на различия в переменных среды
- Запуск команды под tcsh вместо bash
- Выполнение команды в псевдо-tty с использованием / usr / bin / script -c
Но если я добавлю / bin / bash -i в мой скрипт с эхом, который говорит, какую команду набирать, это сработает!
Я использую:
docker version 18.09.6, build 481bc77
docker-compose version 1.24.0, build 0aa59064
Мне нужно получить разрешение от моего руководства, чтобы поделиться не только небольшими фрагментами кода.
Я хочу, чтобы служба запускалась через docker-compose up -d или хотя бы docker-compose start - в сценарии, для автоматизации.
Сообщение об ошибке внутри контейнера (из службы docker logs -f) выглядит следующим образом:
asticsearch.exceptions.ConnectionTimeout: ConnectionTimeout, вызванный - ReadTimeoutError (HTTPConnectionPool (host = u'elasticsearch ', port = 9200): тайм-аут чтения. (тайм-аут чтения = 10))
Я иногда вижу высокую нагрузку в эластичном поиске, которая кажется немного странной. Под высоким я имею в виду 490% на 8 ядрах (вероятно, считая гиперпоточность). Чаще всего он падает примерно на 5-15%.
Вот SSCCE:
#!/bin/bash
set -eu
set -o pipefail
set -x
docker stop elasticsearch || true
docker-compose start elasticsearch
# Give elasticsearch some time to come up.
# Normally I use a small REST client that calls ES until it starts responding - but that wouldn't be self-contained.
sleep 120
docker stop service || true
docker-compose start service
Сценарий сам по себе прекрасно работает, но затем «service» завершается раньше, чем должен.
Спасибо!