Как заставить docker составлять статус работающим, в настоящее время он останавливается после docker -создания - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь установить и запустить свой docker -компонентный статус, попробовав ниже docker -compose yaml, но кажется, что когда я выполняю docker-compose ps, я вижу, что контейнер остановлен, как мне сделать мой docker-compose up и работает бесконечно много раз

docker -compose.yml

  version: "3.7"
  services:
    execute:
      command: tail -f /dev/null
      image: abc/SREBlackBoxTester
      labels:
         - mylabelOne= "SREBlackBoxTester"
      volumes:
         - type: volume
           source: AWS_CREDENTIALS_FOLDER
           target: /home/scar/.aws
           source: SCAR_CONFIG_FOLDER
           target: /home/scar/.scar
           volume:
             nocopy: true
     command: bash -c "while true; do sleep 10; done"

    volumes:
        AWS_CREDENTIALS_FOLDER:
        SCAR_CONFIG_FOLDER:

Здесь идет Docker файл

 FROM python:3.8-alpine

 RUN apk add zip unzip
 RUN addgroup --system scar && adduser -S -G scar scar
 USER scar

 WORKDIR /home/scar/
  RUN mkdir /home/scar/.scar && \
  mkdir /home/scar/.aws && \
  echo '[default]' > /home/scar/.aws/config && \
  echo 'region=us-west-2' >> /home/scar/.aws/config && \
  echo '[default]' > /home/scar/.aws/credentials && \
  echo 'aws_access_key_id=AX' >> /home/scar/.aws/credentials && \
  echo 'aws_secret_access_key=wctKx/KdRCSQ' >> /home/scar/.aws/credentials

ENV PATH=/home/scar/.local/bin:$PATH
ENV SCAR_LOG_PATH=/home/scar/.scar/

RUN pip3 install scar --user
CMD scar  init -n SREBlack -i image 


ENTRYPOINT /bin/sh

Выход docker пс-а

$ docker ps -a
CONTAINER ID        IMAGE                   COMMAND                      

CREATED                  STATUS                              PORTS               
NAMES
f5af892b3b19        abc/image   "/bin/sh -c /bin/sh …"      
Less than a second ago   Exited (0) Less than a second ago                       
clever_wescoff

Ответы [ 3 ]

1 голос
/ 28 февраля 2020

Как правило, контейнер Docker должен быть настроен для запуска определенной программы c. В большинстве случаев по умолчанию не должна быть интерактивная оболочка или искусственная команда tail -f /dev/null. В вашем примере на самом деле ничего не работает с программой, которую вы устанавливаете. Вы должны изменить конец Dockerfile, чтобы он действительно запускался

FROM python:3.8-alpine
RUN pip install scar
CMD scar

и предоставлять такие данные, как учетные данные через volumes: монтирование. (Подумайте, не скомпрометировала ли ваша учетная запись AWS в образе Docker; любой, у кого есть это изображение, может делать все, что ему разрешено в соответствии с вашими разрешениями IAM.)

В приведенном вами примере комбинация ENTRYPOINT и command: приводит к бессмысленной командной строке. В документации Dockerfile по Понимание того, как CMD и ENTRYPOINT взаимодействуют , есть технические подробности. Поскольку вы указали формат оболочки ENTRYPOINT, он будет заключен в sh -c, а затем к этому добавляется command: из файла docker-compose.yml. Вы получите что-то вроде

/bin/sh -c '/bin/sh' tail -f /dev/null

, которое просто запускает оболочку ("tail ..." игнорируется), и, поскольку нет ввода, оно немедленно завершается.

В общем Docker Compose больше ориентирован на запуск долго работающих приложений, таких как базы данных или веб-серверы. В документации SCAR есть пример запуска инструмента в Docker. Однако для таких инструментов командной строки, учитывая необходимость выполнения таких действий, как ручное получение учетных данных pu sh AWS с хоста в контейнер и наличие root -эквивалентных разрешений для запуска инструмента вообще, вы можете удобнее запускать инструмент непосредственно на хосте, возможно, в виртуальной среде Python.

0 голосов
/ 28 февраля 2020
docker-compose up -d

-d флаг обозначает отдельный режим

0 голосов
/ 28 февраля 2020

Ваш docker-compose файл устанавливает две команды для контейнера

 command: tail -f /dev/null

и (* bash уже включен в docker изображение)

command: bash -c "while true; do sleep 10; done"

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

можете ли вы предоставить журналы контейнеров

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