создание docker изображений в двух git средах - PullRequest
0 голосов
/ 13 марта 2020

Я новичок в docker и пытаюсь настроить среду контроля качества воздушного потока (у меня уже есть производство). Это то, как я определил в точке входа. sh

#!/usr/bin/env bash

TRY_LOOP="20"
SLUGIFY_USES_TEXT_UNIDECODE=yes

BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" == 'master' ]
then
   "${REDIS_HOST:="airflow-celery.xxxxx.0001.use1.cache.amazonaws.com"}"
else [ "$BRANCH" == 'QA' ]
   "${REDIS_HOST:="qa-airflow-celery.xxxx.ng.0001.use1.cache.amazonaws.com"}"
fi

: "${REDIS_PORT:="6379"}"

if [ "$BRANCH" == 'master' ]
then
  "${POSTGRES_HOST:="airflow-database.xxxxx.us-east-1.rds.amazonaws.com"}"
  "${POSTGRES_USER:="airflow"}"
else [ "$BRANCH" == 'QA' ]
  "${POSTGRES_HOST:="qa-airflow-database.xxxxx.us-east-1.rds.amazonaws.com"}"
  "${POSTGRES_USER:="airflow"}"
fi

Сборка выполняется успешно, но выдает следующее сообщение об ошибке при попытке запустить контейнер docker и никогда не запускается

/entrypoint.sh: line 6: git: command not found
/entrypoint.sh: line 11: qa-airflow-celery.xxxxx.ng.0001.use1.cache.amazonaws.com: command not found
/entrypoint.sh: line 21: qa-airflow-database.xxxxxxx.us-east-1.rds.amazonaws.com: command not found

Буду очень признателен, если смогу помочь с этим.

1 Ответ

1 голос
/ 14 марта 2020

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

/entrypoint.sh: line 11: qa-airflow-celery.xxxxx.ng.0001.use1.cache.amazonaws.com: command not found
/entrypoint.sh: line 21: qa-airflow-database.xxxxxxx.us-east-1.rds.amazonaws.com: command not found  

Я думаю, что вы можете избавиться от внешних кавычек во всех ваших bash файлах

#!/usr/bin/env bash

TRY_LOOP="20"
SLUGIFY_USES_TEXT_UNIDECODE=yes

BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" == 'master' ]
then
   ${REDIS_HOST:="airflow-celery.xxxxx.0001.use1.cache.amazonaws.com"}
else [ "$BRANCH" == 'QA' ]
   ${REDIS_HOST:="qa-airflow-celery.xxxx.ng.0001.use1.cache.amazonaws.com"}
fi

: ${REDIS_PORT:="6379"}

if [ "$BRANCH" == 'master' ]
then
  ${POSTGRES_HOST:="airflow-database.xxxxx.us-east-1.rds.amazonaws.com"}
  ${POSTGRES_USER:="airflow"}
else [ "$BRANCH" == 'QA' ]
  ${POSTGRES_HOST:="qa-airflow-database.xxxxx.us-east-1.rds.amazonaws.com"}
  ${POSTGRES_USER:="airflow"}
fi  

Если это не сработает, go с этим решением
{ ссылка }

Первая ошибка связана с тем, что изображение воздушного потока не содержит git.

/entrypoint.sh: line 6: git: command not found

Самый простой способ - добавить в entrypoint.sh файл команду установки git в качестве первой строки. Для дистрибутива Debian:

apt install -y git

Если дистрибутив RHEL:

yum -y install git

Недостатком этого подхода является то, что установка занимает некоторое время.
Вам лучше добавить git зависимость от изображения :

  1. Запустите изображение с помощью команды docker run, но без --entrypoint entrypoint.sh.
  2. Проверка идентификатора контейнера
    docker ps
    В качестве примера идентификатор контейнера c3f279d17e0a
  3. docker exec -it c3f279d17e0a bash
  4. Установить git вручную с помощью apt / yum, как указано выше, затем отсоедините bash, набрав ctrl+p и ctrl+q друг за другом.
  5. Зафиксировать новое изображение
    docker commit c3f279d17e0a airflow-git:version1

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

https://docs.docker.com/engine/reference/commandline/commit/

Теперь у вас есть изображение airflow-git:version1, запустите его с вашим оригиналом запустите команду с --entrypoint entrypoint.sh, и она должна работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...